剑指offer-16:合并两个排序的链表
目录
1题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,
当然我们需要合成后的链表满足单调不减规则。
2题目解析
如:链表1:1->3->5;链表2:2->4->6;合并后为:1->2->3->4->5->6
数据结构:链表
算法:递归
- 每次以两个链表头节点中的小值作为合并链表的下一个节点。
- 每次合并的操作都是相同的,故使用递归。
- 注意代码的鲁棒性,即输入链表为空的情况。
3题目答案
/*
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;
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;
}
};