1、要求:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
2、核心处理代码(递归方式)
思路:
(1)判断否有其中一个或两个是空链表,如果是只有1个为空,则返回非空的链表;如果两个都为空,则返回第一个判断的链表;
(2)找到两个链表中最小的元素,作为新链表的头结点;然后把新头结点的下一个作为被选出头结点的那个链表的头,继续比较;
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :val(x), next(NULL)
{
}
};
// 处理函数
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1==NULL)
return pHead2;
else if(pHead2==NULL)
return pHead1;
ListNode* newhead=NULL;
if(pHead1->val<pHead2->val)
{
newhead = pHead1;
newhead->next = Merge(pHead1->next,pHead2);
}
else
{
newhead = pHead2;
newhead->next = Merge(pHead1,pHead2->next);
}
return newhead;
}