题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
题目地址
思路
- 迭代
- 递归
Code(迭代)
class Solution {
public:
ListNode* Merge(ListNode* p1, ListNode* p2) {
if (p1 == nullptr) return p2;
if (p2 == nullptr) return p1;
// 选择头节点
ListNode* head = nullptr;
if (p1->val <= p2->val) {
head = p1;
p1 = p1->next;
} else {
head = p2;
p2 = p2->next;
}
auto cur = head;
while (p1 && p2) {
if (p1->val <= p2->val) {
cur->next = p1;
p1 = p1->next;
} else {
cur->next = p2;
p2 = p2->next;
}
cur = cur->next;
}
// 别忘了拼接剩余部分
if (p1) cur->next = p1;
if (p2) cur->next = p2;
return head;
}
};
Code(递归)
class Solution {
public:
ListNode* Merge(ListNode* p1, ListNode* p2){
if (!p1) return p2;
if (!p2) return p1;
if (p1->val <= p2->val) {
p1->next = Merge(p1->next, p2);
return p1;
} else {
p2->next = Merge(p1, p2->next);
return p2;
}
}
};
不难发现,与我们上次解决的题目十分类似
剑指offer刷题笔记——反转链表
可以对照学习
版权声明:本文为liuzuoping原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。