Advertisement
Josif_tepe

Untitled

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