SkrillexOMG

Doubly Linked List

Apr 16th, 2022
828
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.09 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct Node
  5. {
  6.     int data;
  7.     Node* next;
  8.     Node* prev;
  9. };
  10.  
  11. Node* head = NULL;
  12.  
  13. Node* getNewNode(int x) {
  14.     Node* newNode = new Node();
  15.     newNode->data = x;
  16.     newNode->next = NULL;
  17.     newNode->prev = NULL;
  18.     return newNode;
  19. }
  20.  
  21. void insertHead(int x) {
  22.     Node* newNode = getNewNode(x);
  23.     if (head == NULL)
  24.     {
  25.         head = newNode;
  26.         return;
  27.     }
  28.     head->prev = newNode;
  29.     newNode->next = head;
  30.     head = newNode;
  31. }
  32.  
  33. void insertLast(int x) {
  34.     Node* newNode = getNewNode(x);
  35.     Node* trav = head;
  36.     while (trav->next != NULL)
  37.     {
  38.         trav = trav->next;
  39.     }
  40.     trav->next = newNode;
  41.     newNode->prev = trav;
  42. }
  43.  
  44. void insertAny(int x, int pos) {
  45.     if (pos == 1)
  46.     {
  47.         insertHead(x);
  48.         return;
  49.     }
  50.     Node* newNode = getNewNode(x);
  51.     Node* trav = head;
  52.     for (int i = 1; i < pos - 1; i++)
  53.     {
  54.         trav = trav->next;
  55.     }
  56.     newNode->prev = trav;
  57.     newNode->next = trav->next;
  58.     trav->next = newNode;
  59.     if (newNode->next != NULL)
  60.     {
  61.         newNode->next->prev = newNode;
  62.     }
  63. }
  64.  
  65. void deleteHead() {
  66.     Node* del = head;
  67.     head = del->next;
  68.     delete del;
  69. }
  70.  
  71. //void deleteLast() {
  72. //  Node* trav = head;
  73. //  while (trav->next != NULL)
  74. //  {
  75. //      trav = trav->next;
  76. //  }
  77. //  Node* del = trav->prev;
  78. //  del->next = NULL;
  79. //  delete del;
  80. //}
  81.  
  82. void deleteLast() {
  83.     Node* del = head;
  84.  
  85.     while (del->next != NULL)
  86.     {
  87.         del = del->next;
  88.     }
  89.     del->prev->next = NULL;
  90.     delete del;
  91. }
  92.  
  93. void deleteAny(int pos) {
  94.     if (pos == 1)
  95.     {
  96.         deleteHead();
  97.         return;
  98.     }
  99.     Node* trav = head;
  100.     for (int i = 1; i < pos; i++)
  101.     {
  102.         trav = trav->next;
  103.     }
  104.  
  105.     if (trav->next == NULL)
  106.     {
  107.         deleteLast();
  108.         return;
  109.     }
  110.     Node* del = trav;
  111.     trav->prev->next = trav->next;
  112.     trav->next->prev = trav->prev;
  113.     delete del;
  114. }
  115.  
  116. void print() {
  117.     Node* trav = head;
  118.     while (trav->next != NULL)
  119.     {
  120.         cout << trav->data << " ";
  121.         trav = trav->next;
  122.     }
  123.     cout << trav->data << " ";
  124. }
  125.  
  126. int main() {
  127.     insertHead(20);
  128.     insertHead(10);
  129.     insertLast(40);
  130.     insertAny(30, 3);
  131.     print();
  132.     cout << endl;
  133.  
  134.     deleteHead();
  135.     deleteLast();
  136.     print();
  137.     cout << endl;
  138.     deleteAny(2);
  139.     print();
  140.     return 0;
  141. }
Advertisement
Add Comment
Please, Sign In to add comment