tampurus

4.3 Doubly link list

Dec 8th, 2021 (edited)
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.24 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int ll_size = 0;
  4. struct Node{
  5.     int value;
  6.     struct Node *next;
  7.     struct Node *prev;
  8. };
  9. typedef struct Node Node;
  10. struct Node *head = NULL;
  11.  
  12. void Insertion(int pos , int ele){
  13.     Node *temp = ( Node*) ( malloc(sizeof(Node) ) );
  14.     if( ( pos>ll_size+1 || pos<1)  || temp == NULL){
  15.         printf("\nYou entered wrong position or memory is not allocated");
  16.         return;
  17.     }
  18.     temp->value = ele;
  19.     if(pos == 1){
  20.         temp->prev = NULL;
  21.         temp->next = head;
  22.         head = temp;
  23.     }
  24.     else{
  25.         struct Node *ptr = head;
  26.         pos-=2;
  27.         while(pos--){
  28.             ptr = ptr->next;
  29.         }
  30.         temp->prev = ptr;
  31.         temp->next = ptr->next;
  32.         ptr->next = temp;
  33.     }
  34.     ll_size++;
  35. }
  36. void Deletion(int pos){
  37.     if(head == NULL || (pos>ll_size || pos<1) ){
  38.         printf("\nlinked list is empty already or you have entered wrong position");
  39.         return;
  40.     }
  41.     Node *dele;
  42.     if(pos == 1){
  43.         dele = head;
  44.         head = head->next;
  45.         head->prev = NULL;
  46.         free(dele);
  47.     }
  48.     else{
  49.         Node *ptr=head;
  50.         pos-=2;
  51.         while(pos--){
  52.             ptr = ptr->next;
  53.         }
  54.         dele = ptr->next;
  55.         ptr->next = ptr->next->next;
  56.         ptr->prev = dele->prev;
  57.         free(dele);
  58.     }
  59.     ll_size--;
  60. }
  61. void Print(){
  62.     Node *ptr  = head;
  63.     while(ptr != NULL){
  64.         printf("%d ",ptr->value);
  65.         ptr = ptr->next;
  66.     }
  67. }
  68. int main()
  69. {
  70.     int choice,ele,pos,key;
  71.     while(1){
  72.         printf("\n1 for insertion\n2 for deletion\nany to key just print the link list\n");
  73.         scanf("%d",&choice);
  74.         if(choice == 1){
  75.             printf("Enter the position where you want to insert the element ");
  76.             scanf("%d",&pos);
  77.             printf("\nEnter the element ");
  78.             scanf("%d",&ele);
  79.             Insertion(pos,ele);
  80.         }
  81.         else if (choice == 2){
  82.             printf("\nEnter the position want to delete ");
  83.             scanf("%d",&pos);
  84.             Deletion(pos);
  85.         }
  86.         else Print();
  87.         printf("\n1 to repeat and any key to exit ");
  88.         scanf("%d",&key);
  89.         if(key != 1) break;
  90.     }
  91.     return 0;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment