LeetCode 21
https://leetcode.cn/problems/merge-two-sorted-lists/description/
难度:简单
每次将 list1 和 list2 中较小值作为下一个节点,最后将剩余节点接在后面。
时间复杂度:O(n+m),其中 n 为 list 1 的长度,m 为 list 2 的长度。
空间复杂度:O(1)。仅用到若干额外变量。
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
ListNode dummy{}; // 用哨兵节点简化代码逻辑
auto cur = &dummy; // cur 指向新链表的末尾
while (list1 && list2) {
if (list1->val < list2->val) {
cur->next = list1; // 把 list1 加到新链表中
list1 = list1->next;
} else { // 注:相等的情况加哪个节点都是可以的
cur->next = list2; // 把 list2 加到新链表中
list2 = list2->next;
}
cur = cur->next;
}
cur->next = list1 ? list1 : list2; // 拼接剩余链表
return dummy.next;
}
};