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--------------------
Recent Comments