Skip to main content

Doubly Linked List

Doubly Linked List


CODE

👇

  1. include <stdio.h>
  2. #include <stdlib.h>
  3. typedef struct node
  4. {
  5. int info;
  6. struct node *prev, *next;
  7. }NODE;

  8. NODE* createlist(NODE *list);
  9. NODE* insert(NODE *list, int num, int pos);
  10. void display(NODE *list);
  11. NODE* search(NODE *list, int n1);
  12. NODE* delpos(NODE *list, int pos);
  13. NODE* delvalue(NODE *list, int n2);

  14. void main()
  15. {
  16. int num, n1, n2, n3, pos;
  17. NODE *list=NULL, *temp;
  18. list=createlist(list);
  19. display(list);

  20. printf("\nEnter Element to be search:\t");
  21. scanf("%d", &n1);
  22. temp=search(list, n1);
  23. if(temp!=NULL)
  24. printf(">>'%d' is found<<\n",n1);
  25. else
  26. printf(">>'%d' is not found<<\n",n1);

  27. printf("\nEnter the node data to insert node:\t");
  28. scanf("%d", &num);
  29. printf("Enter the node position to insert node:\t");
  30. scanf("%d", &pos);
  31. list=insert(list,num,pos);
  32. display(list);

  33. printf("\nEnter node postion to delete that node:\t");
  34. scanf("%d", &pos);
  35. list=delpos(list, pos);
  36. display (list);

  37. printf("\nEnter node data to delete node:\t");
  38. scanf("%d", &n2);
  39. list=delvalue(list, n2);
  40. display(list);
  41. }

  42. NODE* createlist(NODE *list)
  43. {
  44. int n, count;
  45. NODE *temp, *newnode;
  46. printf("How many nodes you want to enter? \n");
  47. scanf("%d", &n);
  48. for(count=1; count<=n; count++)
  49. {
  50. newnode=(NODE*)malloc(sizeof(NODE));
  51. newnode->prev=newnode->next=NULL;
  52. printf("Enter the node data:\t");
  53. scanf("%d", &newnode->info);
  54. if(list==NULL)
  55. {
  56. list=temp=newnode;
  57. }
  58. else
  59. {
  60. temp->next=newnode;
  61. newnode->prev=temp;
  62. temp=newnode;
  63. }
  64. }
  65. return list;
  66. }

  67. NODE* insert(NODE *list, int num, int pos)
  68. {
  69. NODE *newnode, *temp;
  70. int i;
  71. newnode=(NODE*)malloc(sizeof(NODE));
  72. newnode->prev=newnode->next=NULL;
  73. newnode->info=num;
  74. if(pos==1)
  75. {
  76. newnode->next=list;
  77. list->prev=newnode;
  78. list=newnode;
  79. return list;
  80. }
  81. for(i=1,temp=list; i<pos-1 && temp!=NULL; i++)
  82. temp=temp->next;
  83. if(temp==NULL)
  84. {
  85. printf(">>position is out of range<< \n");
  86. return list;
  87. }
  88. else
  89. if(temp->next==NULL)
  90. {
  91. newnode->next=temp->next;
  92. newnode->prev=temp;
  93. temp->next=newnode;
  94. return list;
  95. }
  96. else
  97. {
  98. newnode->next=temp->next;
  99. temp->next->prev=newnode;
  100. temp->next=newnode;
  101. newnode->prev=temp;
  102. return list;
  103. }
  104. }

  105. void display(NODE *list)
  106. {
  107. NODE *temp=list;
  108. for(temp=list; temp!=NULL; temp=temp->next)
  109. {
  110. printf("%d", temp->info);
  111. printf("--->>");
  112. }
  113. printf("NULL \n");
  114. }

  115. NODE* search(NODE *list, int n1)
  116. {
  117. NODE *temp=list;
  118. for(temp=list; temp!=NULL; temp=temp->next)
  119. if(temp->info==n1)
  120. return temp;
  121. return NULL;
  122. }

  123. NODE* delpos(NODE *list, int pos)
  124. {
  125. NODE *temp=list, *temp1, *temp2;
  126. int i;
  127. if(pos==1)
  128. {
  129. list=list->next;
  130. list->prev=NULL;
  131. free (temp);
  132. return list;
  133. exit;
  134. }
  135. for(i=1,temp=list; i<pos-1 && temp!=NULL; i++)
  136. temp=temp->next;
  137. if(temp==NULL || temp->next==NULL)
  138. {
  139. printf(">>position out of range<< \n");
  140. return list;
  141. exit;
  142. }
  143. temp1=temp->next;
  144. if(temp1->next==NULL)
  145. {
  146. temp->next=NULL;
  147. free (temp1);
  148. return list;
  149. exit;
  150. }
  151. else
  152. {
  153. temp2=temp1->next;
  154. temp2->prev=temp;
  155. temp->next=temp2;
  156. free (temp1);
  157. return list;
  158. exit;
  159. }
  160. }

  161. NODE* delvalue(NODE *list, int n2)
  162. {
  163. NODE *temp=list, *temp1, *temp2;
  164. if(list->info==n2)
  165. {
  166. list=list->next;
  167. free (temp);
  168. return list;
  169. exit;
  170. }
  171. for(temp=list; temp->next!=NULL; temp=temp->next)
  172. {
  173. if(temp->next->info==n2)
  174. {
  175. temp1=temp->next;
  176. if(temp1->next==NULL)
  177. {
  178. temp->next=NULL;
  179. free (temp1);
  180. return list;
  181. exit;
  182. }
  183. else
  184. {
  185. temp2=temp1->next;
  186. temp->next=temp2;
  187. temp2->prev=temp;
  188. free (temp1);
  189. return list;
  190. exit;
  191. }
  192. }
  193. }
  194. printf(">>Enter valid data<< \n");
  195. return list;
  196. }


👉Execute👈


//Output

/*

How many nodes you want to enter? 

5

Enter the node data: 33

Enter the node data: 64

Enter the node data: 78

Enter the node data: 13

Enter the node data: 57

33--->>64--->>78--->>13--->>57--->>NULL 


Enter Element to be search: 64

>>'64' is found<<


Enter the node data to insert node: 87

Enter the node position to insert node: 4

33--->>64--->>78--->>87--->>13--->>57--->>NULL 


Enter node postion to delete that node: 5

33--->>64--->>78--->>87--->>57--->>NULL 


Enter node data to delete node: 78

33--->>64--->>87--->>57--->>NULL 


*/




                                                                //ThE ProFessoR

Comments