Merging two doubly-linked-lists into another

Code :
#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

 
;