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.nextl2 之后的节点。

  • 如果 l1.val > l2.val,那就把 l2 作为合并链表的头部返回,然后继续合并 l2.nextl1 之后的节点。

  • 递归出口:

    • 没有节点了。

    • 只剩一个节点,直接返回。

复杂度分析

  • 时间复杂度:$O(N)$, N 为新链表长度。

  • 空间复杂度:$O(N)$, N 为新链表长度,递归栈的空间。

代码(JavaScript/C++)

JavaScript Code

C++ Code

更多题解可以访问:https://github.com/suukii/91-days-algorithm

Last updated

Was this helpful?