首页 > 其他分享 >23. 合并 K 个升序链表

23. 合并 K 个升序链表

时间:2024-05-24 10:25:29浏览次数:25  
标签:ListNode cur 23 int lists next 链表 升序

题目描述

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

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

解题思路

这个题目显然是可以用归并排序(区间内单调)的方法——最核心的地方就是合并两个有序链表(力扣第21)

同时也可以用优先级队列的方法,不过要修改比较方法(仿函数)。在优先级队列的方法中,有一个很重要的点,就是把所以节点的后续节点(next)制空,避免出现节点指向出现问题。

代码

归并排序

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        if(lists.size()==0) return nullptr;
        return merge(lists,0,lists.size()-1);
    }
    ListNode* merge(vector<ListNode*>& lists,int left,int right)
    {
        if(left==right) return lists[left];

        int mid=(left+right)>>1;
        ListNode* l=merge(lists,left,mid);
        ListNode* r=merge(lists,mid+1,right);

        ListNode* phead=new ListNode;
        ListNode* cur=phead;
        //合并两个有序链表
        while(l&&r)
        {
            if(l->val<r->val) cur->next=l,l=l->next;
            else cur->next=r,r=r->next;

            cur=cur->next;
        }
        if(l) cur->next=l;
        else cur->next=r;

        return phead->next;
    }
};

优先级队列

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
    struct cmp
    {
        bool operator()(ListNode* a,ListNode* b)
        {
            if(a->val<b->val) return false;
            return true;
        }
    };
public:
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        priority_queue<ListNode*,vector<ListNode*>,cmp> pq;
        for(auto cur:lists)
        {
            while(cur)
            {
                pq.push(cur);
                cur=cur->next;
            }
        }
        ListNode* phead=new ListNode;
        ListNode* cur=phead;
        while(pq.size()!=0)
        {
            //重点,最关键
            pq.top()->next=nullptr;

            cur->next=pq.top();
            cur=cur->next;
            pq.pop();
        }
        return phead->next;
    }
};

标签:ListNode,cur,23,int,lists,next,链表,升序
From: https://blog.csdn.net/m0_60598323/article/details/139080730

相关文章

  • 5.23每日总结
    计网学习要传输一个8192字节的数据字段,必须通过IP分片来分割数据,因为以太网的最大传输单元(MTU)为1500字节。这意味着一个IP数据报的总长度(包括IP头部)不能超过1500字节。我们首先假设IP头部长度为20字节(不含选项部分的标准IPv4头部长度)。这意味着每个IP数据报可以携带的数据部分最......
  • 5/23
    1:构造函数构造函数,是一种特殊的方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数,可根据其参数个数的不同或参数类型的不同来区分它们即构造函数的重载访问修饰符构造方法名(){//初......
  • 5.23链表相交
    链接如下:https://leetcode.cn/problems/intersection-of-two-linked-lists-lcci/solutions/1395092/lian-biao-xiang-jiao-by-leetcode-solutio-2kne/这道题比较简单,暴力循环就可以结束,但是看官方题解还是有些技巧在的,索性也就记录一下。先说下我自己的思路,我自己的思路就是类似......
  • SCAU 19523 最长上升子序列长度
    19523 最长上升子序列长度时间限制:1000MS 代码长度限制:10KB题型:编程题   语言:不限定Description当元素ai1<ai2<……<aiK。就说这个序列是有序上升的。给定序列(a1,a2,……,aN),存在许多这样的子序列(ai1,ai2,……,aiK),其中1<=i1<i2<……<iK......
  • G2303高一上照片
    ![image](https://img20![image](https://img20![image](https://img20......
  • 2024-05-23 闲话
    今天看Friends的时候听到了这首歌。I'msingin'intherain,justsingin'intherain.Whatagloriousfeeling,I'mhappyagain.I'mlaughin'atclouds,sodarkupabove.Thesun'sinmyheartandI'mreadyforlove.Letthesto......
  • 2024年5月23日第五十五篇
    今天看了一下kotlin感觉在短时间内还是难以学完,于是打算继续用java开发android,然后用tkinter绘制了一个画像玩。#脸部(方形)canvas.create_rectangle(x0,y0,x1,y1,fill='peachpuff',outline='black')#头发hair_height=face_height//5canvas.crea......
  • 50-53-57 20240523
     50Shesawme,andwalkedover.Sheteeteredalittle,butitwasnotduetoheronde-tubercularleg.forherlimpwasalmostgone.teeter=towalkormoveunsteadilyorunsurely;totter;wobbletubercular=relatingtoorsufferingfromtuberculosis1这段文字描述......
  • 5-23安全运维管理
    环境管理:1.应指定专门的部门或人员负责机房安全,对机房出人进行管理,定期对机房供配电、空调、温湿度控制、消防等设施进行维护管理。2.应建立机房安全管理制度,对有关物理访问、物品进出和环境安全等方面的管理作出规定3.应不在重要区域接待来访人员,不随意放置含......
  • 全球2023年自然科学指数(Nature Index),各单位排名表
    地址:https://www.nature.com/nature-index/annual-tables/2023/institution/all/all/global自然科学指数(NatureIndex)大揭秘!近日,自然指数官网更新自然指数排名数据(统计时间节点为2022.11.1-2023.10.31),中国高校表现依旧强势。统计结果显示,重庆大学进入全球排名TOP200,位列全球......