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等技术内容,点击立即学习:链接

相关推荐
Nil20812 小时前
leetcode 118杨辉三角
算法·leetcode·职场和发展
传人once13 小时前
页面中心圆圈放大效果如何写
开发语言·javascript·ecmascript
wanderist.14 小时前
线性筛法详解:从筛质数到欧拉函数、Möbius 函数与约数函数
java·数据结构·算法
All for pursuit.14 小时前
【设计-1】208.实现Trie (前缀树)
数据结构·c++·算法·leetcode
weixin_3077791314 小时前
C++代码实现MATLAB中的crossval函数功能
开发语言·c++·算法·matlab
青少儿编程课堂15 小时前
背包问题(0/1 背包与完全背包)解题精讲——动态规划入门
c++·python·算法·bfs·信息学竞赛
光影少年15 小时前
为什么 JavaScript 中 0.1 + 0.2 !== 0.3,如何让其相等?
前端·javascript·算法
HEJOO915 小时前
Linux 设备驱动系列——使用全局工作队列
java·linux·算法
Code_Solitude16 小时前
c语言:递归
java·c语言·算法
edtoplort16 小时前
OpenAI紧急叫停GPT-6.1 Astra训练,奥尔特曼为何踩刹车
人工智能·gpt·算法