Advertisement
Josif_tepe

Untitled

Jan 8th, 2025
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.67 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. void sortiraj(DLL & dll) {
  127.     node *tmp = dll.head;
  128.    
  129.     while(tmp != NULL) {
  130.         node *tmp2 = tmp->next;
  131.         while(tmp2 != NULL) {
  132.             if(tmp->val > tmp2->val) {
  133.                 int x = tmp->val;
  134.                 tmp->val = tmp2->val;
  135.                 tmp2->val = x;
  136.             }
  137.             tmp2 = tmp2->next;
  138.         }
  139.         tmp = tmp->next;
  140.     }
  141.    
  142.    
  143. }
  144.  
  145. int main() {
  146.     DLL dll;
  147.     dll.init();
  148.    
  149.     int n;
  150.     cin >> n;
  151.     for(int i = 0; i < n; i++) {
  152.         int x;
  153.         cin >> x;
  154.         dll.insertEnd(x);
  155.        
  156.     }
  157.     sortiraj(dll);
  158.     dll.print();
  159.  
  160.    
  161.    
  162.     return 0;
  163. }
  164.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement