题目
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4
限制:0 <= 链表长度 <= 1000
思路一:迭代
添加一个虚拟节点处理头结点。
代码
时间复杂度:O(m + n)
空间复杂度:O(1)
class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if (!l1 || !l2) return l1 ? l1 : l2; ListNode *newHead = new ListNode(-1), *pre = newHead; while (l1 && l2) { if (l1->val <= l2->val) { pre->next = l1; l1 = l1->next; } else { pre->next = l2; l2 = l2->next; } pre = pre->next; } pre->next = l1 ? l1 : l2; return newHead->next; } };
思路二:递归
代码
时间复杂度:O(m + n)
空间复杂度:O(1)
class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if (!l1 || !l2) return l1 ? l1 : l2; ListNode *newHead = nullptr; if (l1->val <= l2->val) { newHead = l1; newHead->next = mergeTwoLists(l1->next, l2); } else { newHead = l2; newHead->next = mergeTwoLists(l1, l2->next); } return newHead; } };
来源:https://www.cnblogs.com/galaxy-hao/p/12649861.html