21. 合并两个有序链表

21. 合并两个有序链表 - 力扣(LeetCode)

简单

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

示例 1:

复制代码
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:

复制代码
输入:l1 = [], l2 = []
输出:[]

示例 3:

复制代码
输入:l1 = [], l2 = [0]
输出:[0]

提示:

  • 两个链表的节点数目范围是 [0, 50]
  • -100 <= Node.val <= 100
  • l1l2 均按 非递减顺序 排列

📝 核心笔记:合并两个有序链表 (递归法)

1. 核心思想 (一句话总结)

"谁小谁当头,剩下的任务交给下级。"

比较两个链表的头节点,数值小的那个作为当前的头,然后它的 next 指向剩余部分合并后的结果(递归调用)。

💡 直观理解:

只要选出了当前最小的节点,我就不用管剩下的怎么排了,直接把剩下的任务"外包"给递归函数,等它排好序返回给我接上就行。

2. 算法流程 (三步走)
  1. 判空 (终止条件):
    • 如果 list1 空了,没得比了,直接接上 list2
    • 如果 list2 空了,直接接上 list1
  1. 选头 (比较大小):
    • 看谁更小。假设 list1 小,那 list1 就是老大。
  1. 连接 (递归):
    • list1 的后面 (next) 应该接谁?接 "list1剩余部分" 和 "list2完整部分" 合并后的结果。
🔍 代码回忆清单
复制代码
// 题目:LC 21. 合并两个有序链表
class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        // 1. 终止条件 (底线)
        // 只要有一条链表空了,就直接返回另一条 (另一条也是有序的,直接接上)
        if (list1 == null) return list2; 
        if (list2 == null) return list1;

        // 2. 递归主逻辑 (选老大)
        if (list1.val < list2.val) {
            // list1 小,list1 当头
            // list1 的下家是谁? -> 是 (list1.next 和 list2) PK 出来的赢家
            list1.next = mergeTwoLists(list1.next, list2);
            return list1; // 别忘了返回当前的头
        } else {
            // list2 小 (或相等),list2 当头
            // list2 的下家是谁? -> 是 (list1 和 list2.next) PK 出来的赢家
            list2.next = mergeTwoLists(list1, list2.next);
            return list2;
        }
    }
}
⚡ 快速复习 CheckList (易错点)
  • 终止条件写全了吗? 必须处理 list1 == nulllist2 == null 两种情况。
  • 返回值是谁? 返回的是当前被选中的那个较小的节点(即当前的头)。
  • 空间复杂度? 递归法是 O(N+M),因为消耗了栈空间。如果面试官要求 O(1) 空间,需要改用迭代法 (Dummy Node)。
  • 相等怎么处理? 代码中 else 处理了大于等于的情况,相等时选 list2,这没问题,依然保持有序。
🖼️ 场景联想

拉拉链。

拉链的锁头就是递归函数。

它看着左边齿轮 (list1) 和右边齿轮 (list2),哪个位置低(数值小)就先把哪个齿轮扣进去,然后往上移一格,继续看下一个。

相关推荐
AI深栈5 分钟前
第 15 章 · 第一个 AI 工作流:Hello Graph 从 START 跑到 END
java·人工智能
Tim_107 分钟前
【LeetCode】338、比特位计数
c++·算法·leetcode
搜狐技术产品小编202311 分钟前
解锁Kotlin Serialization高阶玩法:详解4种自定义序列化器与动态上下文策略
java·人工智能
木子算法22 分钟前
不是重心也不是中点:费马—韦伯点、它的最优性条件与迭代求解
人工智能·算法·目标跟踪
花间相见36 分钟前
【计算基础|网络04】—— HTTP接口实战(下):接口测试、鉴权与跨域排错
java·linux·人工智能·后端·python·计算机网络·postman
SEO_juper40 分钟前
2026年用Python批量审计XML Sitemap:揪出sitemap.xml中的“配置错误/死链/过期页“(附完整代码)
java·python·seo·外贸独立站·谷歌优化
一条泥憨鱼1 小时前
苍穹外卖【day11| 用户统计,订单统计,销量排名统计功能实现】
java·后端·苍穹外卖
huaweichenai1 小时前
spring boot操作PDF
java·spring boot·pdf
她的男孩1 小时前
缓存明明命中了却报 ClassCastException:拆完多级缓存控制面,我挖出 5 个静默失效的坑
java·后端·架构