🧩Algo 链表
21. 合并两个有序链表
难度:🟢 Easy | 标签:链表、递归 | 状态:⬜ LeetCode 链接
思路
dummy 哨兵节点 + 双指针拼接。每次取两链表当前更小的接到 tail 后面。
代码
class Solution {
public:
ListNode* mergeTwoLists(ListNode* a, ListNode* b) {
ListNode dummy(0), *tail = &dummy;
while (a && b) {
if (a->val <= b->val) { tail->next = a; a = a->next; }
else { tail->next = b; b = b->next; }
tail = tail->next;
}
tail->next = a ? a : b;
return dummy.next;
}
};
复杂度
- 时间 O(m + n),空间 O(1)
- 递归版:栈 O(m + n)
易错 / 回顾
- dummy 用栈对象省 delete
- 循环结束后剩下的接尾即可(不需要逐个接)
- 递归版很优雅,但 O(n) 栈空间
Related · 链表