21. 合并两个有序链表
https://leetcode-cn.com/problems/merge-two-sorted-lists/
题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。方法 1: 迭代
思路
用两个指针分别遍历两个链表,比较两个指针节点的大小。
将较小的那个节点加到新链表中,然后指针后移。
较大的那个节点指针不动,下一轮继续比较。
如果两个链表长度不一样,继续遍历将多出来的节点加到新链表中就好了。
复杂度分析
时间复杂度:$O(N)$, N 为新链表长度。
空间复杂度:$O(1)$。
代码(JavaScript/C++)
JavaScript Code
C++ Code
方法 2: 递归
思路
如果
l1.val < l2.val,那就把 l1 作为合并链表的头部返回,然后继续合并l1.next和l2之后的节点。如果
l1.val > l2.val,那就把 l2 作为合并链表的头部返回,然后继续合并l2.next和l1之后的节点。递归出口:
没有节点了。
只剩一个节点,直接返回。
复杂度分析
时间复杂度:$O(N)$, N 为新链表长度。
空间复杂度:$O(N)$, N 为新链表长度,递归栈的空间。
代码(JavaScript/C++)
JavaScript Code
C++ Code
Last updated
Was this helpful?