Advertisement
Josif_tepe

Untitled

Apr 2nd, 2025
341
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.04 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4.  
  5. struct node {
  6.     int info;
  7.     node * next;
  8.     node * prev;
  9. };
  10.  
  11. struct DLCL {
  12.     node * head, * tail;
  13.     void init() {
  14.         head = NULL;
  15.         tail = NULL;
  16.     }
  17.    
  18.     void insertFront(int x) {
  19.         node * new_node = new node;
  20.         new_node->info = x;
  21.         new_node->next = NULL;
  22.         new_node->prev = NULL;
  23.        
  24.         if(head == NULL) {
  25.             head = new_node;
  26.             tail = head;
  27.             head->next = tail;
  28.             tail->prev = head;
  29.         }
  30.         else {
  31.             new_node->next = head;
  32.             head->prev = new_node;
  33.             head = new_node;
  34.             tail->next = head;
  35.             head->prev = tail;
  36.         }
  37.        
  38.     }
  39.    
  40.     void insertEnd(int x) {
  41.         node * new_node = new node;
  42.         new_node->info = x;
  43.         new_node->next = NULL;
  44.         new_node->prev = NULL;
  45.        
  46.         if(head == NULL) {
  47.             head = new_node;
  48.             tail = head;
  49.             head->prev = tail;
  50.             tail->next = head;
  51.         }
  52.         else {
  53.             tail->next = new_node;
  54.             new_node->prev = tail;
  55.            
  56.             tail = new_node;
  57.             tail->next = head;
  58.             head->prev = tail;
  59.         }
  60.     }
  61.    
  62.     void deleteFront() {
  63.         if(head != NULL) {
  64.             if(head->next == head) {
  65.                 delete head;
  66.                 head = NULL;
  67.                 tail = NULL;
  68.             }
  69.             else {
  70.  
  71.                 head = head->next;
  72.                 delete head->prev;
  73.                 head->prev = tail;
  74.                 tail->next = head;
  75.                
  76.             }
  77.         }
  78.     }
  79.    
  80.     void deleteEnd() {
  81.         if(head != NULL) {
  82.             if(head->next == head) {
  83.                 delete head;
  84.                 head = NULL;
  85.                 tail = NULL;
  86.             }
  87.             else {
  88.                 tail = tail->prev;
  89.                 delete tail->next;
  90.                 tail->next = head;
  91.                 head->prev = tail;
  92.             }
  93.         }
  94.     }
  95.    
  96.     void deleteNode(int x) {
  97.         if(head != NULL) {
  98.             if(head->info == x) {
  99.                 deleteFront();
  100.             }
  101.             else {
  102.                 node * tmp = head;
  103.                 while(tmp->info != x) {
  104.                     tmp = tmp->next;
  105.                 }
  106.                 if(tmp->next == head) {
  107.                     deleteEnd();
  108.                 }
  109.                 else {
  110.                     tmp->prev->next = tmp->next;
  111.                     tmp->next->prev = tmp->prev;
  112.                     delete tmp;
  113.                 }
  114.             }
  115.         }
  116.     }
  117.     void deleteNode(node *  x) {
  118.         if(head != NULL) {
  119.             if(head == x) {
  120.                 deleteFront();
  121.             }
  122.             else {
  123.                 node * tmp = head;
  124.                 while(tmp != x) {
  125.                     tmp = tmp->next;
  126.                 }
  127.                 if(tmp->next == head) {
  128.                     deleteEnd();
  129.                 }
  130.                 else {
  131.                     tmp->prev->next = tmp->next;
  132.                     tmp->next->prev = tmp->prev;
  133.                     delete tmp;
  134.                 }
  135.             }
  136.         }
  137.     }
  138.    
  139.     void inserAfter(int x, node * after) {
  140.         node * new_node = new node;
  141.         new_node->info = x;
  142.         new_node->next = NULL;
  143.         new_node->prev = NULL;
  144.        
  145.         if(after != NULL) {
  146.             if(after == head) {
  147.                 insertFront(x);
  148.             }
  149.             else if(after == tail) {
  150.                 insertEnd(x);
  151.             }
  152.             else {
  153.                
  154.                 new_node->next = after->next;
  155.                 new_node->prev = after;
  156.                 after->next = new_node;
  157.                 new_node->next->prev = new_node;
  158.             }
  159.         }
  160.     }
  161.     void print() {
  162.         if(head != NULL) {
  163.             node * tmp = head;
  164.             while(tmp != tail) {
  165.                 cout << tmp->info << "-->";
  166.                 tmp = tmp->next;
  167.             }
  168.             cout << tmp->info<<"-->";
  169.             tmp = tmp->next;
  170.             while(tmp != tail) {
  171.                 cout << tmp->info << "-->";
  172.                 tmp = tmp->next;
  173.             }
  174.             cout << tmp->info << endl;
  175.            
  176.             while(tmp != head) {
  177.                 cout << tmp->info << "<--";
  178.                 tmp = tmp->prev;
  179.             }
  180.             cout << tmp->info << "<--";
  181.             tmp = tmp->prev;
  182.             while(tmp != head) {
  183.                 cout << tmp->info << "<--";
  184.                 tmp = tmp->prev;
  185.             }
  186.             cout << tmp->info << endl;
  187.         }
  188.     }
  189.    
  190. };
  191. int main() {
  192.     DLCL dll;
  193.     dll.init();
  194.    
  195.     dll.insertFront(1);
  196.     dll.insertFront(2);
  197.     dll.insertFront(3);
  198.    
  199.     dll.insertEnd(4);
  200.     dll.insertEnd(5);
  201.     dll.insertEnd(6);
  202.     dll.print();
  203.    
  204.    
  205.     node * tmp = dll.head->next;
  206.     dll.inserAfter(7, tmp);
  207.    
  208.     dll.print();
  209.    
  210.     return 0;
  211. }
  212.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement