Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- struct Node{
- int data;
- struct Node* next;
- };
- typedef struct Node Node;
- int count=0;
- void display(Node* p);
- void insertionAtBeg(Node* p, int newData);
- void insertionAtPos(Node* p, int n, int newData);
- void insertionAtEnd(Node* p, int newData);
- void deleteAtBeg(Node* p);
- void deleteAtEnd(Node* p);
- void deleteBeforePos(Node* p, int idx);
- void deleteAfterPos(Node* p, int idx);
- int main(){
- //reverse linked list
- Node* head = (Node*)malloc(sizeof(Node));
- head->data = 0;
- head->next = NULL;
- int choice;
- int data;
- printf("1-display\n2-insert at front\n3-insert at end\n4-delete at front\n5-delete at end\n6-delete before position\n7-delete after position\n0-quit\n");
- do{
- printf("Enter the choice: ");
- scanf("%d", &choice);
- switch(choice){
- case 1:
- display(head);
- break;
- case 2:
- printf("Enter the data: ");
- scanf("%d", &data);
- insertionAtBeg(head, data);
- break;
- case 3:
- printf("Enter the data: ");
- scanf("%d", &data);
- insertionAtEnd(head, data);
- break;
- case 4:
- deleteAtBeg(head);
- break;
- case 5:
- deleteAtEnd(head);
- break;
- case 6:
- printf("Enter the index: ");
- scanf("%d", &data);
- deleteBeforePos(head, data);
- break;
- case 7:
- printf("Enter the index: ");
- scanf("%d", &data);
- deleteAfterPos(head, data);
- break;
- }
- }while(choice != 0);
- return 0;
- }
- void display(Node* p){
- if(p->next == NULL){
- printf("No node to display\n");
- return;
- }
- Node* temp1 = (Node*)malloc(sizeof(Node));
- temp1->next = p->next;
- while(temp1->next != NULL){
- printf("%d ", temp1->next->data);
- temp1->next = temp1->next->next;
- }
- printf("-> null\n");
- }
- void insertionAtBeg(Node* p, int newData){
- Node* temp = (Node*)malloc(sizeof(Node));
- temp->next = NULL;
- temp->data = newData;
- if(p->next == NULL){
- p->next = temp;
- count++;
- return;
- }
- temp->next = p->next;
- p->next = temp;
- count++;
- }
- void insertionAtPos(Node* p, int n, int newData){
- Node* temp = (Node*)malloc(sizeof(Node));
- temp->next = p->next;
- for(int i=0; i<n; i++){
- temp->next = temp->next->next;
- }
- Node* newNode = (Node*)malloc(sizeof(Node));
- newNode->data = newData;
- newNode->next = temp->next->next;
- temp->next->next = newNode;
- count++;
- }
- void insertionAtEnd(Node* p, int newData){
- Node* temp = (Node*)malloc(sizeof(Node));
- temp->next = p->next;
- for(int i=0; i<count-1; i++){
- temp->next = temp->next->next;
- }
- Node* newNode = (Node*)malloc(sizeof(Node));
- newNode->data = newData;
- newNode->next = NULL;
- temp->next->next = newNode;
- count++;
- }
- void deleteAtBeg(Node* p){
- if(p->next == NULL){
- printf("No node to delete");
- return;
- }
- p->next = p->next->next;
- return;
- }
- void deleteAtEnd(Node* p){
- Node* newNode = (Node*)malloc(sizeof(Node));
- newNode->next = p->next;
- while(newNode->next->next->next != NULL){
- newNode->next = newNode->next->next;
- }
- newNode->next->next = NULL;
- }
- void deleteBeforePos(Node* p, int idx){
- if(p->next == NULL){
- printf("No node to delete");
- return;
- }
- Node* newNode = (Node*)malloc(sizeof(Node));
- newNode->next = p->next;
- for(int i=0; i<idx-2; i++){
- newNode->next = newNode->next->next;
- }
- newNode->next->next = newNode->next->next->next;
- }
- void deleteAfterPos(Node* p, int idx){
- if(p->next == NULL){
- printf("No node to delete");
- return;
- }
- Node* newNode = (Node*)malloc(sizeof(Node));
- newNode->next = p->next;
- for(int i=0; i<idx; i++){
- newNode->next = newNode->next->next;
- }
- newNode->next->next = newNode->next->next->next;
- }
Advertisement
Add Comment
Please, Sign In to add comment