Advertisement
AshfaqFardin

Doubly Linked List

Jul 13th, 2021
1,151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.01 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct node
  5. {
  6.     int value;
  7.     node* next;
  8.     node* prev;
  9. };
  10. node* head = NULL;
  11. node* tail = NULL;
  12.  
  13. bool isempty()
  14. {
  15.     if(head==NULL) {
  16.         return true;
  17.     }
  18.     return false;
  19. }
  20.  
  21. void print_list()
  22. {
  23.     node * current_node = head;
  24.     while(current_node!=NULL) {
  25.         cout<<current_node->value<<endl;
  26.         current_node = current_node->next;
  27.     }
  28. }
  29.  
  30. void insert_value(int value)
  31. {
  32.     node* new_node = new node;
  33.     new_node->value = value;
  34.     new_node->next = NULL;
  35.     new_node->prev = NULL;
  36.  
  37.     if(isempty()==true){
  38.         head = new_node;
  39.         tail = new_node;
  40.     }
  41.     else {
  42.         node* current_node = head;
  43.         while(current_node->next != NULL) {
  44.             current_node = current_node->next;
  45.         }
  46.         current_node->next = new_node;
  47.         new_node->prev = current_node;
  48.         tail = new_node;
  49.     }
  50. }
  51.  
  52. void print_reverse()
  53. {
  54.     if(isempty()==true){
  55.         cout<<"list is empty\n";
  56.     }
  57.     node* current_node = tail;
  58.     while(current_node!=NULL) {
  59.         cout<<current_node->value<<endl;
  60.         current_node = current_node->prev;
  61.     }
  62. }
  63.  
  64. bool search_value(int value)
  65. {
  66.     node * current_node = head;
  67.     while(current_node!=NULL) {
  68.         if(current_node->value==value) {
  69.             //cout<<"match found"<<endl;
  70.             return true;
  71.         }
  72.         current_node = current_node->next;
  73.     }
  74.     //cout<<"match not found"<<endl;
  75.     return false;
  76. }
  77.  
  78. void delete_value(int value_to_be_deleted)
  79. {
  80.     if(isempty()==true) {
  81.         cout<<"list is empty"<<endl;
  82.     }
  83.     else {
  84.         if(head->value == value_to_be_deleted){
  85.             node* node_to_be_deleted = head;
  86.             head = head->next;
  87.             head->prev = NULL; // added code
  88.             delete node_to_be_deleted;
  89.         }
  90.         /*added tail code */
  91.         else if(tail->value == value_to_be_deleted){
  92.             node* node_to_be_deleted = tail;
  93.             tail = tail->prev;
  94.             tail->next = NULL;
  95.             delete node_to_be_deleted;
  96.         }
  97.         else {
  98.             node* current_node = head;
  99.             while(current_node->next != NULL) {
  100.                 if(current_node->next->value == value_to_be_deleted) {
  101.                     node *node_to_be_deleted = current_node->next;
  102.                     current_node->next = node_to_be_deleted->next;
  103.                     current_node->next->prev = node_to_be_deleted->prev; //added code
  104.                     delete node_to_be_deleted;
  105.                 }
  106.                 else {
  107.                     current_node = current_node->next;
  108.                 }
  109.  
  110.             }
  111.         }
  112.     }
  113. }
  114.  
  115. int main()
  116. {
  117.     insert_value(4);
  118.     insert_value(5);
  119.     insert_value(7);
  120.     insert_value(7);
  121.     cout << "Inserted list\n";
  122.     print_list();
  123.     cout << "Reversed list:\n";
  124.     print_reverse();
  125.     delete_value(7);
  126.     cout << "Updated Value\n";
  127.     print_reverse();
  128.     cout << "Updated Value\n";
  129.     print_list();
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement