Auto AdSense

Tuesday, 18 November 2014

Data Structures - Merge Two Sorted Linked List To Form A Third Linked List

   #include< iostream.h > 

  #include< conio.h >
  #include< process.h >
  // Creating a NODE Structure
  struct node
  {
     int data; // data
     struct node *next; // link to next node and previous node
  };
  // Creating a class LIST
  class list
  {
     struct node *start;
     public:
       void create(); // to create a list
       void show(); // show
       void merge(list,list); // Merge two list's
  };
  // Main function
  int main()
  {
     clrscr();
     list l1,l2,l3;
     cout<<"Enter the First List in ascending order.";
     l1.create(); // to create a first list
     cout<<"Enter the Second List in ascending order.";
     l2.create(); // to create a second list
     cout<<"The first list is";
     l1.show();
     cout<<"The second list is";
     l2.show();
     l3.merge(l1,l2);
     l3.show();
     getch();
     return (0);
  }
  // Functions
  // Creating a new node
  void list::create()
  {
     struct node *nxt_node,*pre_node;
     int value,no,i;
     start=nxt_node=pre_node=NULL;
     cout<<"How many nodes : ";
     cin>>no;
     cout<<"Enter "<< no <<" Elements: ";
     for(i=1;i<=no;i++)
     {
       cin>>value;
       nxt_node=new node;
       nxt_node->data=value;
       nxt_node->next=NULL;
       if(start==NULL)
         start=nxt_node;
       else
         pre_node->next=nxt_node;
         pre_node=nxt_node;
     }
     cout<<"The list is created!";
  }
  // Displaying LIST
  void list::show()
  {
     struct node *ptr=start;
     cout<<"The List is ";
     while(ptr!=NULL)
     {
       cout<< ptr->data<<" -> ";
       ptr=ptr->next;
     }
     cout<<" ";
  }
  void list::merge(list l1,list l2)
  {
     struct node *nxt_node,*pre_node,*pptr,*qptr;
     int dat;
     pptr=l1.start;
     qptr=l2.start;
     start=nxt_node=pre_node=NULL;
     while(pptr!=NULL && qptr!=NULL)
     {
       if(pptr->data<=qptr->data)
       {
         dat=pptr->data;
         pptr=pptr->next;
       }
       else
       {
         dat=qptr->data;
         qptr=qptr->next;
       }
       nxt_node=new node;
       nxt_node->data=dat;
       nxt_node->next=NULL;
       if(start==NULL)
         start=nxt_node;
       else
         pre_node->next=nxt_node;
         pre_node=nxt_node;
     }
     if(pptr==NULL)
     {
       while(qptr!=NULL)
       {
         nxt_node=new node;
         nxt_node->data=qptr->data;
         nxt_node->next=NULL;
         if(start==NULL)
           start=nxt_node;
         else
           pre_node->next=nxt_node;
         pre_node=nxt_node;
         qptr=qptr->next;
       }
     }
     else if(qptr==NULL)
     {
       while(pptr!=NULL)
       {
         nxt_node=new node;
         nxt_node->data=pptr->data;
         nxt_node->next=NULL;
         if(start==NULL)
           start=nxt_node;
         else
           pre_node->next=nxt_node;
         pre_node=nxt_node;
         pptr=pptr->next;
       }
     }
     cout<<"The lists are merged.";
     return;
  }   

No comments:

Post a Comment