Advertisement
Eternoseeker

Doubly linked list

Nov 8th, 2022 (edited)
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.05 KB | Source Code | 0 0
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. struct node{
  5.     float data;
  6.     node *next;
  7.     node *prev;
  8. };
  9.  
  10. class doublelinkedlist{
  11.     node *head;
  12. public:
  13.     doublelinkedlist(){
  14.         head=NULL;
  15.     }
  16.  
  17. void insertatbegin(int d){
  18.         node *nn=new node;
  19.         nn->data=d;
  20.         nn->prev=NULL;
  21.         nn->next=head;
  22.         if(head)
  23.             {
  24.             head->prev=nn;
  25.             }
  26.         head=nn;
  27.     }
  28.  
  29. void insertatend(int d){
  30.         node *nn=new node;
  31.         nn->data=d;
  32.         nn->next=NULL;
  33.         nn->prev=NULL;
  34.         node *t=head;
  35.         while(t->next){
  36.             t=t->next;
  37.         }
  38.         t->next=nn;
  39.         nn->prev=t;
  40.     }
  41.  
  42. void display(){
  43.         node *t=head;
  44.         while(t!=NULL){
  45.             cout << t->data <<" -> ";
  46.             t=t->next;
  47.         }
  48.         cout<<"NULL\n";
  49.     }
  50.  
  51. void deleted(int v)
  52.     {
  53.         node *t=head;
  54.         while(t->data!=v && t!=NULL){
  55.             t=t->next;
  56.         }
  57.         if(t->prev){
  58.             t->prev->next=t->next;
  59.         }
  60.         if(t->next){
  61.             t->next->prev=t->prev;
  62.         }
  63.         free(t);
  64.     }
  65.  
  66. void displayreverse(){
  67.         node *t = head;
  68.         while(t -> next != NULL){
  69.             t = t -> next;
  70.         }
  71.         while(t != NULL){
  72.             cout << t->data <<" -> ";
  73.             t=t->prev;
  74.         }
  75.         cout << "NULL" << endl;
  76.     }
  77.  
  78. void deletionAtBegin(){
  79.         node *t = head;
  80.         if(t == NULL){
  81.             cout << "Empty list" << endl;
  82.         }
  83.         else{
  84.             head = head -> next;
  85.             if(head != NULL){
  86.                 head -> prev = NULL;
  87.             }
  88.             free(t);
  89.         }
  90.     }
  91.  
  92. void deletionAtEnd(){
  93.         node *t = head;
  94.         while(t -> next != NULL){
  95.             t = t-> next;
  96.         }
  97.         if(t -> prev != NULL){
  98.             t -> prev -> next = NULL;
  99.             free(t);
  100.         }
  101.         else{
  102.             free(t);
  103.             head = NULL;
  104.         }
  105. }
  106.  
  107. void insertAtPos(){
  108.     node *nn = new node;
  109.     int n, pos;
  110.     cout << "Enter a data part and position respectively:" << endl;
  111.     cin >> n;
  112.     cin >> pos;
  113.     nn -> data = n;
  114.     nn -> next = NULL;
  115.     nn -> prev = NULL;
  116.     if(head == NULL){
  117.         insertatbegin(n);
  118.     }
  119.     else{
  120.         int i = 0;
  121.         node *p = head;
  122.         while(i != pos -2){
  123.             p = p -> next;
  124.             i++;
  125.         }
  126.         nn -> next = p -> next;
  127.         p -> next = nn;
  128.         nn -> prev = p;
  129.     }
  130. }
  131.  
  132. void insertAftervalue(int v, int aftervalue);
  133. };
  134.  
  135.  
  136. int main(){
  137.     int ch=0,v1=0;
  138.     doublelinkedlist d;
  139.     do{
  140.         cout<<"1: Insert element at beginning\n";
  141.         cout<<"2: Insert element at Ending\n";
  142.         cout<<"3: Delete element \n";
  143.         cout<<"4: Print in reverse order\n";
  144.         cout<<"5: Delete at beginning\n";
  145.         cout<<"6: Delete at end\n";
  146.         cout<<"7: Insert after value\n";
  147.         cout<<"0: Exit\n";
  148.         cout<<"Enter choice" << endl;
  149.         cin>>ch;
  150.         switch(ch){
  151.         case 1:
  152.             cout<<"\nEnter the element to insert at the beginning:" << endl;
  153.             cin>>v1;
  154.             d.insertatbegin(v1);
  155.             d.display();
  156.             break;
  157.         case 2:
  158.             cout<<"\nEnter the element want to be at end:" << endl;
  159.             cin>>v1;
  160.             d.insertatend(v1);
  161.             d.display();
  162.             break;
  163.         case 3:
  164.             cout<<"\nEnter the element to be delete:" << endl;
  165.             cin>>v1;
  166.             d.deleted(v1);
  167.             d.display();
  168.             break;
  169.         case 4:
  170.             cout<<"\nList in reversed order is:" << endl;
  171.             d.displayreverse();
  172.             break;
  173.         case 5:
  174.             d.deletionAtBegin();
  175.             d.display();
  176.             break;
  177.         case 6:
  178.             d.deletionAtEnd();
  179.             d.display();
  180.             break;
  181.         case 7:
  182.             d.insertAtPos();
  183.             d.display();
  184.             break;
  185.         }
  186.     }while(ch!=0);
  187. }
  188.  
  189.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement