题目:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路:
递归:首先比较两个链表的头结点p1,p2,值较小的那个头结点假设是p1)作为合并链表的头结点,然后对于以p1->next和p2起始的两个链表,重复相同的事情,找到的头结点作为已有的下一节点,因此可以递归完成合并。
非递归:依次比较大小插入新链表
在线测试:
AC代码:
递归:
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1==NULL)
return pHead2;
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;
}
};
非递归:
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1==NULL)
return pHead2;
if(pHead2==NULL)
return pHead1;
ListNode* pNewHead=NULL;
ListNode* pNode=NULL;
if(pHead1->val < pHead2->val)
{
pNewHead=pHead1;
pHead1=pHead1->next;
}
else
{
pNewHead=pHead2;
pHead2=pHead2->next;
}
pNode=pNewHead;
while(pHead1 && pHead2)
{
if(pHead1->val < pHead2->val)
{
pNode->next=pHead1;
pHead1=pHead1->next;
}
else
{
pNode->next=pHead2;
pHead2=pHead2->next;
}
pNode=pNode->next;
}
if(pHead1==NULL)
pNode->next=pHead2;
else
pNode->next=pHead1;
return pNewHead;
}
};