题目:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调递增规则。
例子
如:链表1:1->3->5;链表2:2->4->6;合并后为:1->2->3->4->5->6。
链接:
剑指Offer(第2版):P145
思路标签:
- 数据结构:链表
- 算法:递归
解答:
1. C++
- 对问题进行分解。
- 每次以两个链表头节点中的小值作为合并链表的下一个节点。
- 每次合并的操作都是相同的,故使用递归。
- 注意代码的鲁棒性,即输入链表为空的情况。
/*
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 == nullptr)
return pHead2;
else if(pHead2 == nullptr)
return pHead1;
ListNode* pMergeHead = nullptr;
if(pHead1->val < pHead2->val){
pMergeHead = pHead1;
pMergeHead->next = Merge(pHead1->next, pHead2);
}
else{
pMergeHead = pHead2;
pMergeHead->next = Merge(pHead1, pHead2->next);
}
return pMergeHead;
}
};