My Solution is in C++ and is as follows --
void list::merge(list& l1)
{
if(this == &l1) // same list
return;
node *t1 = head;
node *t2 = l1.head;
node *temp1 = NULL, *temp2 = NULL;
if(t1->data > t2->data)
{
temp2 = t2->next;
t2->next = t1;
head = t2;
t2 = temp2;
}
else
t1 = t1->next;
node* prev = head; // prev is must as we need to have previous pointer to insert node at a given position
while(t1&&t2)
{
if(t1->data <= t2->data)
t1=t1->next;
else
{
temp1 = prev->next;
temp2 = t2->next;
prev->next = t2;
t2->next = temp1;
t2 = temp2;
}
prev = prev->next;
}
if(!t1)
prev->next=t2;
}
If any body has better solution or is able to get flaws, Please tell me.
ReplyDelete