34 合并K个升序链表

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

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

示例 1:

复制代码
输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:
[
  1->4->5,
  1->3->4,
  2->6
]
将它们合并到一个有序链表中得到。
1->1->2->3->4->4->5->6

示例 2:

复制代码
输入:lists = []
输出:[]

示例 3:

复制代码
输入:lists = [[]]
输出:[]

提示:

  • k == lists.length
  • 0 <= k <= 10^4
  • 0 <= lists[i].length <= 500
  • -10^4 <= lists[i][j] <= 10^4
  • lists[i]升序 排列
  • lists[i].length 的总和不超过 10^4

思路

先合并两个升序链表为一个升序链表,然后再用合并后的链表合并第三个升序链表,依次类推。

总的算法是:合并两个有序链表

cpp 复制代码
class Solution {
public:
    //合并两个升序的链表
ListNode* merge(ListNode* head1, ListNode* head2) {
    if(!head1) return head2;
    if(!head2) return head1;
    ListNode prehead(0);
    ListNode* pMove=&prehead;

    while(head2&&head1){
        if(head1->val<=head2->val){
            pMove->next=head1;
            head1=head1->next;
        }
        else{
            pMove->next=head2;
            head2=head2->next;
        }

        pMove=pMove->next;
    }

    if(head2)
        pMove->next=head2;
    if(head1)
        pMove->next=head1;

    return (&prehead)->next;
}
ListNode* mergeKLists(vector<ListNode*>& lists) {
     int size=lists.size();
    if(0==size) return nullptr;
    if(1==size) return lists[0];
    ListNode* list=nullptr;
    for(int i=0;i<size;i++){
        list=merge(list,lists[i]);
    }
    return list;
}
};

推荐一个零声教育学习教程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,点击立即学习:链接

相关推荐
Navigator_Z3 小时前
LeetCode //C - 1252. Cells with Odd Values in a Matrix
c语言·算法·leetcode
幸运小圣4 小时前
PointerEvent 常用属性与事件整理【JavaScript】
开发语言·javascript·ecmascript
语戚5 小时前
力扣 1621. 大小为K的不重叠线段的数目:动态规划(Java 实现)
java·算法·leetcode·动态规划·力扣·dp
青山木5 小时前
Hot 100 --- 最长有效括号
java·数据结构·算法·leetcode·动态规划
志尊宝5 小时前
Vue3 零基础每日笔记(038):亲手封装 useDebounceFn 与 useThrottleFn——高频事件的流量阀
前端·javascript·vue·html·vue3
这料鬼有毒6 小时前
二刷hot100-1143.最长公共子序列
算法·leetcode·动态规划
政企项目老覃7 小时前
边缘 AI 推理部署:安防零售场景下的模型裁剪与端侧落地实践
人工智能·程序人生·算法·性能优化·vllm
默_笙7 小时前
🚅 地铁的"回头路、存档点与人工闸机"(下):LangGraph 的循环、持久化与中断
前端·javascript
flash俊杰7 小时前
Zod Schema 驱动的 IPC 契约:从入参校验到状态机一致性的三层防御
javascript·typescript