Merge two ordered linked list

Merge two ordered linked list to form a 3rd sorted list using C++

/**************************************************************	
	Author: Arun Vishnu M V
	Web: www.arunmvishnu.com
	Description: Merge two oredered linked list to form a 3rd sorted list using C++.
***************************************************************/
#include<conio.h>   	
#include<iostream.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.\n";
   l1.create(); // to create a first list
   cout<<"\nEnter the Second List in ascending order.\n";
   l2.create(); // to create a second list
   cout<<"\nThe first list is\n";
   l1.show();
   cout<<"\nThe second list is\n";
   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<<"\nHow many nodes : ";
   cin>>no;
   cout<<"Enter "<>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<<"\nThe list is created!\n\n";
}

// Displaying LIST
void list::show()
{
   struct node *ptr=start;
   cout<<"\n\nThe List is \n";
   while(ptr!=NULL)
   {
      cout<data<<" -> ";
      ptr=ptr->next;
   }
   cout<<"\b\b\b   ";
}

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<<"\nThe lists are merged.";
   return;
}
//---------------------- END--------------------

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *