【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;
    }
};
相关推荐
杜子不疼.2 小时前
【C++ AI 大模型接入 SDK】 - DeepSeek 模型接入(上)
开发语言·c++·chatgpt
石山代码4 小时前
C++ 内存分区 堆区
java·开发语言·c++
csdn_aspnet5 小时前
Python 算法快闪 LeetCode 编号 70 - 爬楼梯
python·算法·leetcode·职场和发展
张小姐的猫6 小时前
【Linux】多线程 —— 线程互斥
linux·运维·服务器·c++
m0_629494737 小时前
LeetCode 热题 100-----26.环形链表 II
数据结构·算法·leetcode·链表
做人求其滴8 小时前
面试经典 150 题 380 274
c++·算法·面试·职场和发展·力扣
见叶之秋8 小时前
C++基础入门指南
开发语言·c++
计算机安禾8 小时前
【c++面向对象编程】第42篇:模板特化与偏特化:为特定类型定制实现
开发语言·c++·算法
玖釉-8 小时前
C++ 中的循环语句详解:while、do...while、for、嵌套循环与循环控制
开发语言·c++·算法
欧米欧9 小时前
C++进阶数据结构之搜索二叉树
开发语言·数据结构·c++