问题:输入两个递增的单链表,合并这两个链表使新链表中的结点仍然是按照递增排序的。例如下图所示。
思路:我们先判断哪个结点是新链表中的第一个结点,将指针p1p2指向两个链表的头结点,因为p1指向结点的元素比p2指向的要小,所以L1中的结点为新链表中的第一个结点,并将p1向后挪一个。
然后我们继续从这2个链表中,找到较小的那一个结点继续插入到新链表的尾部,直至两个链表同时为空时,插入完毕。
//合并两个排序的链表
Node* Merge(Node* L1, Node* L2)
{
if(L1 == NULL)
return L2;
if(L2 == NULL)
return L1;
Node *p1 = L1;
Node *p2 = L2;
Node *pNew;
if(p1->data < p2->data)
{
pNew = p1;
p1 = p1->next;
}
else
{
pNew = p2;
p2 = p2->next;
}
Node *pRear = pNew;
while(p1!=NULL || p2!=NULL)
{
if(p1 != NULL && p2 != NULL)
{
if(p1->data < p2->data)
{
pRear->next = p1;
pRear = p1;
p1 = p1->next;
}
else
{
pRear->next = p2;
pRear = p2;
p2 = p2->next;
}
}
else if(p1 != NULL)
{
pRear->next = p1;
pRear = p1;
p1 = p1->next;
}
else
{
pRear->next = p2;
pRear = p2;
p2 = p2->next;
}
}
pRear->next = NULL;
return pNew;
}