Advertisement
Josif_tepe

Untitled

Apr 2nd, 2025
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.85 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 DLL {
  12.     node * head;
  13.    
  14.     void init() {
  15.         head = 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.         }
  27.         else {
  28.             new_node->next = head;
  29.             head->prev = new_node;
  30.             head = new_node;
  31.         }
  32.     }
  33.    
  34.     void insertEnd(int x) {
  35.         node * new_node = new node;
  36.         new_node->info = x;
  37.         new_node->next = NULL;
  38.         new_node->prev = NULL;
  39.        
  40.         if(head == NULL) {
  41.             head = new_node;
  42.         }
  43.         else {
  44.             node * tmp = head;
  45.             while(tmp->next != NULL) {
  46.                 tmp = tmp->next;
  47.             }
  48.            
  49.             tmp->next = new_node;
  50.             new_node->prev = tmp;
  51.         }
  52.     }
  53.    
  54.     void deleteFront() {
  55.         if(head != NULL) {
  56.             if(head->next == NULL) {
  57.                 delete head;
  58.                 head = NULL;
  59.             }
  60.             else {
  61.                 head = head->next;
  62.                 delete head->prev;
  63.                 head->prev = NULL;
  64.             }
  65.         }
  66.     }
  67.     void deleteEnd() {
  68.         if(head != NULL) {
  69.             if(head->next == NULL) {
  70.                 delete head;
  71.                 head = NULL;
  72.             }
  73.             else {
  74.                 node * tmp = head;
  75.                 while(tmp->next != NULL) {
  76.                     tmp = tmp->next;
  77.                 }
  78.                 tmp->prev->next = NULL;
  79.                 delete tmp;
  80.                 tmp = NULL;
  81.             }
  82.         }
  83.     }
  84.    
  85.     void deleteAll() {
  86.         while(head != NULL) {
  87.             deleteEnd();
  88.         }
  89.     }
  90.    
  91.     void deleteNode(int x) {
  92.         if(head != NULL) {
  93.             if(head->info == x) {
  94.                 deleteFront();
  95.             }
  96.             else {
  97.                 node * tmp = head;
  98.                 while(tmp != NULL and tmp->info != x) {
  99.                     tmp = tmp->next;
  100.                 }
  101.                
  102.                 if(tmp->next == NULL) {
  103.                     deleteEnd();
  104.                 }
  105.                 else {
  106.                     tmp->prev->next = tmp->next;
  107.                     tmp->next->prev = tmp->prev;
  108.                     delete tmp;
  109.                    
  110.                 }
  111.             }
  112.         }
  113.     }
  114.    
  115.     void deleteNode(node *  x) {
  116.         if(head != NULL) {
  117.             if(head == x) {
  118.                 deleteFront();
  119.             }
  120.             else {
  121.                 node * tmp = head;
  122.                 while(tmp != NULL and tmp != x) {
  123.                     tmp = tmp->next;
  124.                 }
  125.                
  126.                 if(tmp->next == NULL) {
  127.                     deleteEnd();
  128.                 }
  129.                 else {
  130.                     tmp->prev->next = tmp->next;
  131.                     tmp->next->prev = tmp->prev;
  132.                     delete tmp;
  133.                    
  134.                 }
  135.             }
  136.         }
  137.     }
  138.     void print() {
  139.         node * tmp = head, * last;
  140.         while(tmp != NULL) {
  141.             last = tmp;
  142.             cout << tmp->info << "->";
  143.             tmp = tmp -> next;
  144.         }
  145.         cout << endl;
  146.        
  147.         while(last != NULL) {
  148.             cout << last->info << "<--";
  149.             last = last->prev;
  150.         }
  151.         cout << endl;
  152.     }
  153. };
  154. int main() {
  155.     DLL dll;
  156.     dll.init();
  157.    
  158.     dll.insertFront(1);
  159.     dll.insertFront(2);
  160.     dll.insertFront(3);
  161.    
  162.    
  163.     dll.insertEnd(4);
  164.     dll.insertEnd(5);
  165.     dll.insertEnd(6);
  166.     dll.print();
  167.    
  168.     dll.deleteNode(4);
  169.     dll.print();
  170.    
  171.     return 0;
  172. }
  173.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement