【Hot 100 刷题计划】 LeetCode 23. 合并 K 个升序链表 | C++ 顺序合并

LeetCode 23. 合并 K 个升序链表

📌 题目描述

题目级别:困难 (Hard)

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

  • 示例 1:
    输入:lists = [[1,4,5],[1,3,4],[2,6]]
    输出:[1,1,2,3,4,4,5,6]

💡 破题思路:顺序合并 (Sequential Merge)

合并 KKK 个链表最朴素、最容易理解的思路就是:"化繁为简,两两合并"。

我们可以把这个问题拆解为:

  1. 基础组件 :写一个辅助函数 mergeTwoLists,专门负责合并两个有序链表。这部分你使用了经典的 Dummy 节点 迭代法,逻辑非常严密。
  2. 主逻辑 :初始化一个结果链表 res。然后遍历整个链表数组,通过 res = mergeTwoLists(res, tt),像"滚雪球"一样,把数组里的每一个链表依次合并到 res 中。

💻 C++ 代码实现 (原汁原味作者版)

cpp 复制代码
class Solution {
public:
    // 辅助函数:合并两个升序链表
    ListNode* mergeTwoLists(ListNode* a, ListNode* b)
    {
        // 边界处理:若其中一个为空,直接返回另一个
        if (!a || !b) return a ? a : b;
        ListNode *dummy = new ListNode(0);
        ListNode *cur = dummy;

        while (a && b)
        {
            if (a->val < b->val)
            {
                cur->next = a;
                a = a->next;
            }
            else 
            {
                cur->next = b;
                b = b->next;
            }
            cur = cur->next;
        }

        // 拼接剩余部分
        cur->next = a ? a : b;
        return dummy->next;
    }

    ListNode* mergeKLists(vector<ListNode*>& lists) {
        ListNode *res = nullptr;
        // 顺序合并:将数组中的链表一个接一个合并到 res 中
        for (auto tt : lists)
        {
            res = mergeTwoLists(res, tt);
        }

        return res;
    }
};
相关推荐
SHARK_pssm5 小时前
【C++——类和对象(下)】
开发语言·c++·经验分享·笔记
汉克老师6 小时前
GESP2026年9月认证C++二级( 第一部分选择题(1~7题)精讲
c++·gesp·小学生·学c++编程
沫璃染墨6 小时前
《从零入门Linux系统篇(五十四):线程篇·七——互斥锁底层原理:从原子交换到线程竞争与锁实现》
linux·运维·服务器·开发语言·c++·驱动开发·系统架构
可乐ea8 小时前
GitHub Security Lab 开源 Fuzzing Taskflow:让 LLM 智能体自己跑完 C/C++ 模糊测试
jvm·c++·github·模糊测试·mcp·代码agent·智能体自动化
朝朝辞暮i8 小时前
C++ 第 13 课:值传递 —— 为什么函数里改了,外面却没变?
java·c++·算法
无忧.芙桃9 小时前
C++语言原理与实践(十):vector类的底层实现
开发语言·c++·算法
无名猿9 小时前
std::variant 完全指南:类型安全的 union 与 std::visit 用法
c++·stl·标准库·现代c++
无名猿10 小时前
C++ 迭代器五分类与失效场景汇总:一张表避开所有 UB
c++·stl·标准库·踩坑记录
0+11110 小时前
算法 --模拟
c++·算法·leetcode
hetao173383710 小时前
2026-10-01~02 hetao1733837 的刷题记录
c++·算法