Advertisement
Eternoseeker

doubly linked list

Nov 23rd, 2022
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.36 KB | Source Code | 0 0
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. struct Node{
  5. public:
  6.     int data;
  7.     Node* next;
  8.     Node* prev;
  9. };
  10.  class DLL{
  11.    Node* head;
  12. public:
  13.     DLL(){
  14.         head = NULL;
  15.     }
  16.     void insertAtTheHead(int dataToInsert){
  17.         /* 1. allocate node */
  18.         Node* new_node = new Node();
  19.  
  20.         /* 2. put in the data */
  21.         new_node->data = dataToInsert;
  22.  
  23.         /* 3. Make next of new node as head and previous as NULL */
  24.         new_node->next = head;
  25.         new_node->prev = NULL;
  26.  
  27.         /* 4. change prev of head node to new node in case of existing head */
  28.         if ((head) != NULL)
  29.             head->prev = new_node;
  30.  
  31.         /* 5. move the head to point to the new node */
  32.         head = new_node;
  33.     }
  34.  
  35.  
  36.     void insertAtTheEnd(int dataToInsert){
  37.         /* 1. allocate node */
  38.         Node* new_node = new Node();
  39.  
  40.         /* 2. put in the data */
  41.         new_node->data = dataToInsert;
  42.  
  43.         /* 3. Make next and prev of new node as NULL */
  44.         new_node->next = NULL;
  45.         new_node->prev = NULL;
  46.  
  47.         /* 4a. If head is NULL, add this node as the head; */
  48.  
  49.         if(head==NULL){
  50.             head = new_node;
  51.         }
  52.         else{ /* 4. Find out the last node and add new node after that */
  53.             Node* t = head;
  54.             while(t->next !=NULL)
  55.                 t=t->next;
  56.             t->next = new_node;
  57.             new_node->prev = t;
  58.  
  59.         }
  60.  
  61.     }
  62.     void insertAfterValue(int valueToInsert, int afterValue){
  63.         Node* nn = new Node();
  64.         nn->data = valueToInsert;
  65.         nn->next=nn->prev = NULL;
  66.  
  67.         Node* t = head;
  68.         while(t->data != afterValue){
  69.             t = t->next;
  70.             if(t==NULL){
  71.                 cout<<afterValue<<" does not exist"<<endl;
  72.             }
  73.         }
  74.         if(t->next == NULL){
  75.             t->next = nn;
  76.             nn->prev = t;
  77.         }
  78.         else{
  79.             nn->next = t->next;
  80.             t->next->prev = nn;
  81.  
  82.             nn->prev = t;
  83.             t->next = nn;
  84.         }
  85.     }
  86.     void insertBeforeValue(int valueToInsert, int beforeValue){
  87.         Node* nn = new Node();
  88.         nn->data = valueToInsert;
  89.         nn->next=nn->prev = NULL;
  90.  
  91.         Node* t = head;
  92.         while(t->data != beforeValue){
  93.             t = t->next;
  94.             if(t==NULL){
  95.                 cout<<beforeValue<<" does not exist"<<endl;
  96.             }
  97.         }
  98.         if(t->prev == NULL){
  99.             t->prev = nn;
  100.             nn->next = t;
  101.  
  102.             head = nn;
  103.         }
  104.         else{
  105.             nn->prev = t->prev;
  106.             t->prev->next = nn;
  107.  
  108.             nn->next = t;
  109.             t->prev = nn;
  110.         }
  111.     }
  112.     void display(){
  113.         Node* t = head;
  114.         while(t!=NULL){
  115.             cout<<t->data<<"  ";
  116.             t=t->next;
  117.         }
  118.         cout<<endl;
  119.     }
  120.     void backwardDisplay(){
  121.         Node* t = head;
  122.         while(t->next!=NULL)
  123.             t = t->next;
  124.         while(t!=NULL){
  125.             cout<<t->data<<"  ";
  126.             t=t->prev;
  127.         }
  128.         cout<<endl;
  129.     }
  130.     void deleteAValue(int Value){
  131.         if (head == NULL){
  132.             cout<<" Linked List does not exist.."<<endl;
  133.             return;
  134.         }
  135. /*Finding the node to be deleted*/
  136.         Node* del = head;
  137.         if(head == NULL){
  138.             cout<<"DLL does not exist..";
  139.             return;
  140.         }
  141.         while(del->data !=Value){
  142.             del = del->next;
  143.             if(del==NULL){     /* Data Not Found*/
  144.                 cout<<" Data does not exist.."<<endl;
  145.                 return;
  146.             }
  147.         }
  148.         if (del->next !=NULL)
  149.             del->next->prev = del->prev;
  150.         if(del->prev!=NULL)
  151.             del->prev->next = del->next;
  152.         if (head == del)
  153.             head = del->next;
  154.         free(del);
  155. }
  156.  
  157.  
  158.  };
  159.  
  160. int main(){
  161.     DLL dobj;
  162.     dobj.deleteAValue(100);
  163.     dobj.insertAtTheEnd(10);
  164.     dobj.insertAtTheHead(5);
  165.     dobj.insertAtTheHead(2);
  166.     dobj.insertAtTheEnd(20);
  167.  
  168.     dobj.display();
  169.  
  170.  
  171.     dobj.deleteAValue(100);
  172.  
  173.     dobj.deleteAValue(2);
  174.     dobj.display();
  175.  
  176.     dobj.deleteAValue(10);
  177.     dobj.display();
  178.  
  179.     dobj.insertAfterValue(1000,5);
  180.     dobj.display();
  181.  
  182.     dobj.insertAfterValue(2000,20);
  183.     dobj.display();
  184.  
  185.     dobj.insertBeforeValue(7000,5);
  186.     dobj.display();
  187.     dobj.backwardDisplay();
  188.     return 0;
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement