fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct Node
  5. {
  6. int data;
  7. struct Node *Next;
  8. struct Node *Prev;
  9. };
  10.  
  11. struct Node *createNode(int data)
  12. {
  13. struct Node *newNode = (struct Node *)malloc(sizeof(struct Node));
  14. newNode->data = data;
  15. newNode->Next = NULL;
  16. newNode->Prev = NULL;
  17. return newNode;
  18. }
  19.  
  20. void printList(struct Node *head)
  21. {
  22. if (head == NULL)
  23. {
  24. printf("The List is empty \n");
  25. return;
  26. }
  27. else
  28. {
  29. struct Node *temp = head;
  30. while (temp != NULL)
  31. {
  32. printf(" %d ->", temp->data);
  33. temp = temp->Next;
  34. }
  35. printf(" NULL\n");
  36. }
  37. }
  38.  
  39. struct Node *insertAtBeg(struct Node *head, int data)
  40. {
  41. struct Node *newNode = createNode(data);
  42. struct Node *temp = head;
  43.  
  44. if (head == NULL)
  45. {
  46. head = newNode;
  47. return newNode;
  48. }
  49. else
  50. {
  51. newNode->Next = temp;
  52. temp->Prev = newNode;
  53. head = newNode;
  54. return newNode;
  55. }
  56. }
  57.  
  58. struct Node* insertAfter(struct Node *head, int data, int target)
  59. {
  60. struct Node* newNode = createNode(data);
  61. struct Node* temp;
  62. struct Node* ptr = head;
  63.  
  64. if (head == NULL)
  65. {
  66. printf("The list is Empty");
  67. return newNode;
  68. }
  69. else
  70. {
  71. while (ptr->data != target && ptr != NULL)
  72. {
  73. ptr = ptr->Next;
  74. }
  75. temp = ptr->Next;
  76. ptr->Next = newNode;
  77. newNode->Prev = ptr;
  78.  
  79. if (temp != NULL)
  80. {
  81. newNode->Next = temp;
  82. temp->Prev = newNode;
  83. }
  84. }
  85. return head;
  86. }
  87.  
  88. struct Node* insertAtEnd(struct Node* head, int data){
  89. struct Node* newNode = createNode(data);
  90. struct Node* ptr = head;
  91. if(head==NULL){
  92. head = newNode;
  93. return newNode;
  94. }
  95. while(ptr->Next != NULL){
  96. ptr = ptr->Next;
  97. }
  98. ptr->Next = newNode;
  99. newNode->Next = NULL;
  100. newNode->Prev = ptr;
  101. return head;
  102. }
  103.  
  104. struct Node* deleteFromEnd(struct Node* head){
  105. if(head == NULL){
  106. printf("The List is empty");
  107. return head;
  108. }
  109. struct Node* ptr = head;
  110. while(ptr->Next != NULL){
  111. ptr = ptr->Next;
  112. }
  113. struct Node* temp = ptr->Prev;
  114. temp->Next = NULL;
  115. free(ptr);
  116. return head;
  117. }
  118.  
  119. int main()
  120. {
  121. struct Node *head = NULL;
  122. head = createNode(90);
  123. printList(head);
  124. head = insertAtBeg(head, 45);
  125. printList(head);
  126. head = insertAfter(head, 78, 90);
  127. printList(head);
  128. head = insertAtEnd(head, 25);
  129. printList(head);
  130. head = deleteFromEnd(head);
  131. printList(head);
  132.  
  133. return 0;
  134. }
  135.  
Success #stdin #stdout 0.01s 5320KB
stdin
Standard input is empty
stdout
 90 -> NULL
 45 -> 90 -> NULL
 45 -> 90 -> 78 -> NULL
 45 -> 90 -> 78 -> 25 -> NULL
 45 -> 90 -> 78 -> NULL