Josif_tepe

Untitled

Sep 4th, 2025
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.76 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct node {
  5.     int info;
  6.     node *next;
  7.     node *prev;
  8. };
  9.  
  10. struct DoublyLinkedList {
  11.     node * head;
  12.    
  13.     void init() {
  14.         head = NULL;
  15.     }
  16.    
  17.     void insertFront(int x) {
  18.         node * new_node = new node;
  19.         new_node->info = 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.    
  33.     void insertBack(int x) {
  34.         node * new_node = new node;
  35.         new_node->info = x;
  36.         new_node->next = NULL;
  37.         new_node->prev = NULL;
  38.        
  39.         if(head == NULL) {
  40.             head = new_node;
  41.         }
  42.         else {
  43.             node * tmp = head;
  44.             while(tmp->next != NULL) {
  45.                 tmp = tmp->next;
  46.             }
  47.            
  48.             tmp->next = new_node;
  49.             new_node->prev = tmp;
  50.         }
  51.     }
  52.    
  53.     void deleteFront() {
  54.         if(head != NULL) {
  55.             if(head->next == NULL) {
  56.                 delete head;
  57.                 head = NULL;
  58.             }
  59.             else {
  60.                 head = head->next;
  61.                 delete head->prev;
  62.                 head->prev = NULL;
  63.             }
  64.         }
  65.     }
  66.    
  67.     void deleteBack() {
  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 deleteNode(int x) {
  86.         if(head != NULL) {
  87.             if(head->info == x) {
  88.                 deleteFront();
  89.             }
  90.             else {
  91.                 node *tmp = head;
  92.                 while(tmp != NULL and tmp->info != x) {
  93.                     tmp = tmp->next;
  94.                 }
  95.                
  96.                 if(tmp != NULL) {
  97.                     tmp->prev->next = tmp->next;
  98.                     tmp->next->prev = tmp->prev;
  99.                    
  100.                     delete tmp;
  101.                     tmp = NULL;
  102.                 }
  103.             }
  104.         }
  105.     }
  106.    
  107.     void deleteNode(node * x) {
  108.         if(head != NULL) {
  109.             if(head == x) {
  110.                 deleteFront();
  111.             }
  112.             else {
  113.                 node *tmp = head;
  114.                 while(tmp != NULL and tmp != x) {
  115.                     tmp = tmp->next;
  116.                 }
  117.                
  118.                 if(tmp != NULL) {
  119.                     tmp->prev->next = tmp->next;
  120.                     tmp->next->prev = tmp->prev;
  121.                    
  122.                     delete tmp;
  123.                     tmp = NULL;
  124.                 }
  125.             }
  126.         }
  127.     }
  128.     void print() {
  129.         node * tmp = head;
  130.         node * back = NULL;
  131.         while(tmp != NULL) {
  132.             cout << tmp->info << " --> ";
  133.             back = tmp;
  134.             tmp = tmp->next;
  135.         }
  136.        
  137.         cout << endl;
  138.        
  139.         while(back != NULL) {
  140.             cout << back->info << " <-- ";
  141.             back = back->prev;
  142.         }
  143.         cout << endl;
  144.     }
  145.    
  146. };
  147.  
  148. int main() {
  149.  
  150.     DoublyLinkedList dll;
  151.     dll.init();
  152.    
  153.     dll.insertFront(1);
  154.     dll.insertFront(2);
  155.     dll.insertFront(3);
  156.    
  157.     dll.insertBack(4);
  158.     dll.insertBack(5);
  159.    
  160.     dll.print();
  161.    
  162.     dll.deleteNode(1);
  163.    
  164.     dll.print();
  165.    
  166.     return 0;
  167. }
  168.  
  169. // 108 105 110 107 101 100 108 111 111 112
  170.  
Advertisement
Add Comment
Please, Sign In to add comment