【LeetCode HOT100】21. 合并两个有序链表

加载中... 浏览

题目

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

提示

一句话思路:递归——每次比较两个头节点,值较小的那个留下来,它的 next 指向剩余两个链表的合并结果

  • 递归终止条件:其中一个链表为空,直接返回另一个链表(剩余部分已有序,无需再排)。
  • 每层递归只做一件事:比较 l1.vall2.val,小的留下,大的和另一链表的剩余部分继续递归合并。
  • 时间复杂度 O(m + n),m、n 分别为两条链表长度;空间复杂度 O(m + n)(递归栈深度)。

答案

python
class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        if not l1:                # l1 为空,直接返回剩余的 l2
            return l2
        if not l2:                # l2 为空,直接返回剩余的 l1
            return l1
        if l1.val <= l2.val:      # l1 节点更小,l1 留下
            l1.next = self.mergeTwoLists(l1.next, l2)    # l1.next = 合并 l1 后段和 l2
            return l1             # 返回当前 l1 节点
        else:                      # l2 节点更小,l2 留下
            l2.next = self.mergeTwoLists(l1, l2.next)    # l2.next = 合并 l1 和 l2 后段
            return l2             # 返回当前 l2 节点

留言板

加载评论中...
【LeetCode HOT100】206. 反转链表
【LeetCode HOT100】234. 回文链表
Valaxy v0.28.0-beta.1 驱动|主题-Yunv0.28.0-beta.1