Doubly Linked List Delete at Any Position

  1. #include<stdio.h>  
  2. #include<conio.h>  
  3. #include<stdlib.h>  
  4. typedef struct node{  
  5.     int data;  
  6.     struct node* next;  
  7.     struct node* prev;  
  8. }node;  
  9. struct node* head=NULL;  
  10. void insert(int x)  
  11. {  
  12.     struct node* temp=NULL;  
  13.         temp=(node*)malloc(sizeof(struct node));  
  14.         temp->data=x;  
  15.         if(head==NULL)  
  16.         {  
  17.             temp->next=NULL;  
  18.             head=temp;  
  19.             temp->prev=head;  
  20.         }  
  21.         else  
  22.         {  
  23.             head->prev=temp;  
  24.             temp->next=head;  
  25.             head=temp;  
  26.               
  27.         }  
  28. }  
  29. void print()  
  30. {  
  31.     struct node* temp=head;  
  32.     while(temp!=NULL)  
  33.     {  
  34.         printf("%d",temp->data);  
  35.         temp=temp->next;  
  36.           
  37.     }  
  38. }  
  39. void DeleteAnyValue(int x)  
  40. {  
  41.     struct node* temp=head;  
  42.     if(head==NULL)  
  43.     {  
  44.         printf("No records to delete");       
  45.     }  
  46. else if(temp->data==x)  
  47.     {  
  48.         head=temp->next;  
  49.         free(temp);  
  50.     }  
  51.     else  
  52.     {  
  53.         struct node* temp2=NULL;  
  54.         temp2=temp->next;  
  55.         while(temp->next->data!=x)  
  56.         {  
  57.             temp=temp->next;  
  58.             temp2=temp->next;  
  59.         }  
  60.         temp->next=temp2->next;  
  61.         temp2->prev=temp;  
  62.           
  63.         free(temp2);  
  64.           
  65.     }  
  66.     printf("  After Deletion ");  
  67.     print();  
  68. }  
  69. void main()  
  70. {  
  71.     insert(5);  
  72.     insert(2);  
  73.     insert(3);  
  74.     insert(7);  
  75.     print();  
  76.     DeleteAnyValue(2);  
  77.     getch();  
  78. }