输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
- 分析
最简单的情况,如果其中一个链表为空,那么直接输出另一个链表。
对于两个链表都不为空的情况,一般方法,假设两个已知的链表分别为pHead1,pHead2,则新建一个结果链表pHead。从两个链表的头部开始,如果pHead1的值大于pHead2的,把pHead2的值存入pHead,然后用pHead2的下一个节点值与pHead1的当前节点值比较,反之,同理。从分析可以看出每次比较过程相同,可以采用递归。
思路举例:
链表1:1,4,5,7
链表2:2,3,6
第一次比较:1<2,pHead中添加1,pHead1节点右移
第二次比较:4>2,pHead中添加2,pHead2节点右移
第三次比较:4>3,pHead中添加3,pHead2节点右移
第四次比较:4<6,pHead中添加4,pHead1节点右移
第五次比较:5<6,pHead中添加5,pHead1节点右移
第六次比较:7>6,pHead中添加6,pHead2节点右移
第七次比较:pHead2节点为空,返回pHead1节点值,pHead中添加7 - 代码
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(!pHead1)
return pHead2;
if(!pHead2)
return pHead1;
ListNode *pHead;
if(pHead1->val > pHead2->val){
pHead=pHead2;
pHead->next=Merge(pHead1,pHead2->next);
}else{
pHead=pHead1;
pHead->next=Merge(pHead1->next,pHead2);
}
return pHead;
}
};