Auto AdSense

Tuesday, 18 November 2014

Data Structures - Take two doubly-linked lists of nodes and merges them into another doubly-linked list of nodes

       #include< iostream >
  using namespace std;
  class Node
  {
     public:
       int data;
       Node *next;
       Node *prev;
       Node()
       {
         data=0;
         next=prev=NULL;
       }
  };
  class Node1
  {
     public:
       int data;
       Node1 *next;
       Node1 *prev;
       Node1()
       {
         data=0;
         next=prev=NULL;
       }
  };
  class Node2
  {
     public:
       int data;
       Node2 *next;
       Node2 *prev;
       Node2()
       {
         data=0;
         next=prev=NULL;
       }
  };
  class DoublyLinkedList
  {
     private:
       Node *headNode, *tailnode;
       Node1 *headNode1, *tailNode1;
       Node2 *headNode2, *tailNode2;
     public:
       DoublyLinkedList()
       {
         headNode=tailNode=NULL;
         headNode1=tailNode1=NULL;
         headNode2=tailNode2=NULL;
       }
       void Insert();//Insert data into the two lists
       void Merge() ;//Merging two lists into one
       void Display();//Display only the merged list
  };
  void DoublyLinkedList::Insert()
  {
     char option;
     //This section inserts elements into the nodes of the first list
     do
     {
       Node *newnode = new Node();
       cin>>newnode->data;
       newnode->next=NULL;
       newnode->prev=NULL;
       if(headNode==NULL)
       {
         headNode= tailNode=newnode;
       }
       else
       {
         Node *curr = headNode;
         while(curr->next!=NULL)
         {
           curr=curr->next;
         }
         curr->next=tailNode=newnode;
         newnode->prev=curr;
       }
       cout<<"Enter y to continue adding data into the first list :";
       cin>>option;
     }
     while(option=='y'||option=='Y');
     //The section inserts the elements into the nodes of the second list
     do
     {
       Node1 *newnode = new Node1();
       cin>>newnode->data;
       newnode->next=NULL;
       newnode->prev=NULL;
       if(headNode1==NULL)
       {
         headNode1=tailNode1=newnode;
       }
       else
       {
         Node1 *curr = headNode1;
         while(curr->next!=NULL)
         {
           curr=curr->next;
         }
         curr->next= tailNode1=newnode;
         newnode->prev=curr;
       }
       cout<<"Enter y to continue adding data into the second list :";
       cin>>option;
     }
     while(option=='y'||option=='Y');
  }
  void DoublyLinkedList::Merge()
  {
     Node *currentNode=headNode;
     Node1 *currentNode1=headNode1;
     //This section of code copies all the data from list 1 into the new list
     while(currentNode!=NULL)
     {
       Node2 *newnode = new Node2();
       newnode->data = currentNode->data;
       newnode->next = NULL;
       newnode->prev = NULL;
       if(headNode2==NULL)
       {
         headNode2=tailNode2=newnode;
       }
       else
       {
         Node2 *temp = headNode2;
         while(temp->next!=NULL)
         {
           temp=temp->next;
         }
         temp->next=tailNode2=newnode;
         newnode->prev=temp;
       }
       currentNode=currentNode->next;
     }
     //This section of code appends the new list with data from the second list
     while(currentNode1!=NULL)
     {
       Node2 *newnode = new Node2();
       newnode->data = currentNode1->data;
       newnode->next = newnode->prev=NULL;
       if(tailNode2->next==NULL)
       {
         tailNode2->next=newnode;
         newnode->prev = tailNode2;
         tailNode2=newnode;
       }
       currentNode1= currentNode1->next;
     }
  }
  void DoublyLinkedList::Display()
  {
     Node2 *currentNode2 = headNode2;
     while(currentNode2!=NULL)
     {
       cout << currentNode2->data <<" ";
       currentNode2=currentNode2->next;
     }
     cout<< endl;
  }
  void main()
  {
     DoublyLinkedList DLL;
     DLL.Insert();
     DLL.Merge();
     DLL.Display();
  }       

No comments:

Post a Comment