当前位置: 首页 > news >正文

力扣:23,-合并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

来源:力扣(LeetCode)

题目链接:力扣-23.合并k个升序链表

解题思路

前置知识:力扣:21-合并两个有序链表_真的没事鸭的博客-CSDN博客 

这道题我们把链表两两结合,如果会合并两个有序链表的话,这道题应该很容易就能想出来,不过是稍微绕了一点弯子而已,本质还是合成两个有序链表的问题。

我们创建一个ans链表和一个head链表,ans链表就是我们最后返回的结果,head一直指向两个链表合并之后的头结点,然后我们让ans和vector中的链表进行合并,建立一个res链表用来存储两个链表合并后的结果,合并之后我们让ans继续指向head,然后再继续和vector中的链表进行合并。

这样最后ans就是所要求的的链表了。

代码实现

/**
 * 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) {
        ListNode* ans=new ListNode();
        ListNode* head;//一直指向res的头结点
        for(int i=0;i<lists.size();i++)
        {
            ListNode* res=new ListNode();//存储两个链表合并后的结果
            head=res;//将head指向res
            merge(ans->next,lists[i],res);
            ans=head;//将ans指向合并链表后的头结点
        }
        return ans->next;
    }
    //合并两个链表的相关操作
    void merge(ListNode* &list1,ListNode* &list2,ListNode* &ans)
    {
        while(list1&&list2)
        {
            if(list1->val>list2->val)
            insert(list2,ans);
            else
            insert(list1,ans);
        }
        while(list1)
        insert(list1,ans);
        while(list2)
        insert(list2,ans);
    }
    //将一个节点的值插入到另外一个链表
    void insert(ListNode* &list,ListNode* &ans)
    {
        ans->next=list;
        ans=ans->next;
        list=list->next;
    }

};

相关文章:

  • 移动Web第三天 1 移动端特点 2 百分比布局 3 Flex布局
  • vue中用ref实现父子组件、孙组件、兄弟组件、非亲子孙组件互相调用的方法
  • 【信号去噪】基于鲸鱼算法优化VMD实现信号去噪附matlab代码
  • git开发分支管理
  • 啊哈,一道有趣的Go并发题
  • [编程题]数据库连接池 - 牛客网题解
  • 线性回归模型(OLS)3
  • 如何利用腾讯云轻量应用服务器五分钟搭建一个WordPress博客?
  • 从外到内理解c++引用
  • [极客大挑战 2019]BabySQL
  • vue3+vite+windicss+element-plus+axios+router+cookies 搭建
  • ElasticSearch docker 方式安装
  • Spring——IOC 操作 Bean 管理(FactoryBean,作用域以及bean生命周期)
  • java毕业设计成品源码网站基于javaWeb停车场车辆管理系统的设计与实现|车位
  • 【Python零基础入门篇 · 5】:占位符和格式化输入输出、标识符和保留字
  • python3.6+scrapy+mysql 爬虫实战
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • Android 架构优化~MVP 架构改造
  • Angular6错误 Service: No provider for Renderer2
  • css系列之关于字体的事
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • JAVA并发编程--1.基础概念
  • 深入浅出webpack学习(1)--核心概念
  • 思维导图—你不知道的JavaScript中卷
  • 一道闭包题引发的思考
  • 一起参Ember.js讨论、问答社区。
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (26)4.7 字符函数和字符串函数
  • (4)事件处理——(7)简单事件(Simple events)
  • (52)只出现一次的数字III
  • (AngularJS)Angular 控制器之间通信初探
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)负载均衡,回话保持,cookie
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core Swagger 过滤部分Api
  • .net 程序发生了一个不可捕获的异常
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • @ComponentScan比较
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • @staticmethod和@classmethod的作用与区别
  • [AIGC] MySQL存储引擎详解