Divyansh_Chourey

singly linked list

Sep 18th, 2024
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.29 KB | Source Code | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. struct Node{
  5.     int data;
  6.     struct Node* next;
  7. };
  8.  
  9. typedef struct Node Node;
  10. int count=0;
  11.  
  12. void display(Node* p);
  13. void insertionAtBeg(Node* p, int newData);
  14. void insertionAtPos(Node* p, int n, int newData);
  15. void insertionAtEnd(Node* p, int newData);
  16. void deleteAtBeg(Node* p);
  17. void deleteAtEnd(Node* p);
  18. void deleteBeforePos(Node* p, int idx);
  19. void deleteAfterPos(Node* p, int idx);
  20.  
  21. int main(){
  22. //reverse linked list
  23.     Node* head = (Node*)malloc(sizeof(Node));
  24.     head->data = 0;
  25.     head->next = NULL;
  26.     int choice;
  27.     int data;
  28.     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");
  29.     do{
  30.         printf("Enter the choice: ");
  31.         scanf("%d", &choice);
  32.  
  33.         switch(choice){
  34.             case 1:
  35.                 display(head);
  36.                 break;
  37.             case 2:
  38.                 printf("Enter the data: ");
  39.                 scanf("%d", &data);
  40.                 insertionAtBeg(head, data);
  41.                 break;
  42.             case 3:
  43.                 printf("Enter the data: ");
  44.                 scanf("%d", &data);
  45.                 insertionAtEnd(head, data);
  46.                 break;
  47.             case 4:
  48.                 deleteAtBeg(head);
  49.                 break;
  50.             case 5:
  51.                 deleteAtEnd(head);
  52.                 break;
  53.             case 6:
  54.                 printf("Enter the index: ");
  55.                 scanf("%d", &data);
  56.                 deleteBeforePos(head, data);
  57.                 break;
  58.             case 7:
  59.                 printf("Enter the index: ");
  60.                 scanf("%d", &data);
  61.                 deleteAfterPos(head, data);
  62.                 break;
  63.         }
  64.     }while(choice != 0);
  65.    
  66.    
  67.     return 0;
  68. }
  69.  
  70. void display(Node* p){
  71.     if(p->next == NULL){
  72.         printf("No node to display\n");
  73.         return;
  74.     }
  75.     Node* temp1 = (Node*)malloc(sizeof(Node));
  76.     temp1->next = p->next;
  77.     while(temp1->next != NULL){
  78.         printf("%d ", temp1->next->data);
  79.         temp1->next = temp1->next->next;
  80.     }
  81.     printf("-> null\n");
  82. }
  83.  
  84. void insertionAtBeg(Node* p, int newData){
  85.    
  86.     Node* temp = (Node*)malloc(sizeof(Node));
  87.     temp->next = NULL;
  88.     temp->data = newData;
  89.    
  90.     if(p->next == NULL){
  91.         p->next = temp;
  92.         count++;
  93.         return;
  94.     }
  95.    
  96.     temp->next = p->next;
  97.     p->next = temp;
  98.     count++;
  99.    
  100. }
  101.  
  102. void insertionAtPos(Node* p, int n, int newData){
  103.    
  104.     Node* temp = (Node*)malloc(sizeof(Node));
  105.     temp->next = p->next;
  106.     for(int i=0; i<n; i++){
  107.         temp->next = temp->next->next;
  108.     }
  109.     Node* newNode = (Node*)malloc(sizeof(Node));
  110.     newNode->data = newData;
  111.     newNode->next = temp->next->next;
  112.     temp->next->next = newNode;
  113.     count++;
  114. }
  115.  
  116. void insertionAtEnd(Node* p, int newData){
  117.     Node* temp = (Node*)malloc(sizeof(Node));
  118.     temp->next = p->next;
  119.     for(int i=0; i<count-1; i++){
  120.         temp->next = temp->next->next;
  121.     }
  122.     Node* newNode = (Node*)malloc(sizeof(Node));
  123.     newNode->data = newData;
  124.     newNode->next = NULL;
  125.     temp->next->next = newNode;
  126.     count++;
  127. }
  128.  
  129. void deleteAtBeg(Node* p){
  130.     if(p->next == NULL){
  131.         printf("No node to delete");
  132.         return;
  133.     }
  134.     p->next = p->next->next;
  135.     return;
  136. }
  137.  
  138. void deleteAtEnd(Node* p){
  139.     Node* newNode = (Node*)malloc(sizeof(Node));
  140.     newNode->next = p->next;
  141.     while(newNode->next->next->next != NULL){
  142.         newNode->next = newNode->next->next;
  143.     }
  144.     newNode->next->next = NULL;
  145. }
  146.  
  147.  
  148. void deleteBeforePos(Node* p, int idx){
  149.     if(p->next == NULL){
  150.         printf("No node to delete");
  151.         return;
  152.     }
  153.     Node* newNode = (Node*)malloc(sizeof(Node));
  154.     newNode->next = p->next;
  155.     for(int i=0; i<idx-2; i++){
  156.         newNode->next = newNode->next->next;
  157.     }
  158.     newNode->next->next = newNode->next->next->next;
  159. }
  160.  
  161. void deleteAfterPos(Node* p, int idx){
  162.     if(p->next == NULL){
  163.         printf("No node to delete");
  164.         return;
  165.     }
  166.     Node* newNode = (Node*)malloc(sizeof(Node));
  167.     newNode->next = p->next;
  168.     for(int i=0; i<idx; i++){
  169.         newNode->next = newNode->next->next;
  170.     }
  171.     newNode->next->next = newNode->next->next->next;
  172. }
Advertisement
Add Comment
Please, Sign In to add comment