题目:
有两个有序链表,各自内部是有序的,但是两个链表之间是无序的,合并两个链表。
思路:
假设两个有序链表分别为first和second。建立两个单链表p1,p2。分别从链表头开始遍历,比较p1->data和p2->data,若p1->data >= p2->data,取p2,p1=p1->next;否则取p1,p2=p2->next。当其中一个链表遍历完后,将另一个链表的剩下部分赋给结果。
代码:
Node *Merge_LinkList(Node *first, Node *second)
{
if(first == NULL)
{
return second;
}
if(second == NULL)
{
return first;
}
Node *p1, *p2, *result, *temp;
p1 = first;
p2 = second;
result = NULL;
if(p1->data >= p2->data)
{
result = p2;
p2 = p2->next;
}else
{
result = p1;
p1 = p1->next;
}
temp = result;
while(p1 != NULL && p2 != NULL)
{
if(p1->data >= p2->data)
{
temp->next = p2;
temp = p2;
p2 = p2->next;
}else
{
temp->next = p1;
temp = p1;
p1 = p1->next;
}
}
if(p1 != NULL)
{
temp->next = p1;
}
if(p2 != NULL)
{
temp->next = p2;
}
return result;
}