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

23. 合并 K 个升序链表

时间:2023-04-03 17:13:44浏览次数:31  
标签:ListNode cur val 23 lists next 链表 升序

题目描述

  给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。

解题

  1 /**
  2  * Definition for singly-linked list.
  3  * public class ListNode {
  4  *     int val;
  5  *     ListNode next;
  6  *     ListNode() {}
  7  *     ListNode(int val) { this.val = val; }
  8  *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  9  * }
 10  */
 11 class Solution {
 12     // 思路1:利用java的PriorityQueue(推荐)
 13 
 14     // 思路2:把集合中所有的数字加入到一个集合中,然后把集合按升序排序,然后按照顺序创建ListNode
 15 
 16     // 思路3:采用合并两个有序链表的方法,两两合并,即让第一个依次和后面的链表合并
 17 
 18 
 19     // 思路1
 20     public ListNode mergeKLists(ListNode[] lists) {
 21         // 将list中的listNode按照val从小到大的顺序加入到优先队列
 22         PriorityQueue<ListNode> priorityQueue = new PriorityQueue<>((o1, o2) -> o1.val - o2.val); 
 23         for (ListNode each : lists) {
 24             if (each == null) {
 25                 continue;
 26             }
 27             priorityQueue.add(each);
 28         }
 29 
 30         ListNode head = new ListNode(); // 链表的头
 31         ListNode cur = head; // 移动指针
 32         while (!priorityQueue.isEmpty()) {
 33             ListNode tem = priorityQueue.poll(); // 从优先队列中弹出val最小的listNode
 34             cur.next = tem;
 35             cur = cur.next;
 36             if (tem.next != null) { // 如果该链表的next不为空,继续把next加入到优先队列
 37                 priorityQueue.add(tem.next);
 38             }
 39         }
 40         return head.next;
 41     }
 42 
 43 
 44     // 思路2
 45     public ListNode mergeKLists(ListNode[] lists) {
 46         if (lists.length == 0) {
 47             return null;
 48         }
 49         List<Integer> list = new ArrayList<>();
 50         for (ListNode each : lists) { // 将所有的数字加入到list集合中
 51             while (each != null) {
 52                 list.add(each.val);
 53                 each = each.next;
 54             }
 55         }
 56         Collections.sort(list); // 将集合中的数字从小到大排序
 57         int listSize = list.size();
 58         ListNode head = new ListNode();
 59         ListNode cur = head;     
 60         for (int i = 0; i < listSize ; i++) { 
 61             ListNode node = new ListNode(list.get(i)); // 按照顺序从集合中拿数字,并创建新链表
 62             cur.next = node;
 63             cur = cur.next; 
 64         }
 65         return head.next;
 66     }
 67 
 68 
 69     // 思路3
 70     public ListNode mergeKLists(ListNode[] lists) {
 71         // 当lists中的元素个数小于2个
 72         if (lists.length == 0 || lists.length == 1) {
 73             return lists.length == 0 ? null : lists[0];
 74         }
 75         // 第一个ListNode逐渐与后面的每一个合并,n个元素需要合并n - 1次
 76         ListNode first = lists[0];
 77         for (int i = 1; i < lists.length; i++) {
 78             first = mergeTwoList(first, lists[i]); // 每合并一次first就会被更新
 79         }
 80         return first;
 81     }
 82 
 83     // 合并两个有序链表
 84     ListNode mergeTwoList(ListNode listNode1, ListNode listNode2) {
 85         ListNode head = new ListNode(); // 自定义一个头节点
 86         ListNode cur = head; 
 87         while (listNode1 != null && listNode2 != null) { // 当listNode1和listNode2同时不为空进入循环
 88             if (listNode1.val >= listNode2.val) { // cur的next指向val小的节点
 89                 cur.next = listNode2;
 90                 listNode2 = listNode2.next;
 91             } else {
 92                 cur.next = listNode1;
 93                 listNode1 = listNode1.next;
 94             }
 95             cur = cur.next; // cur指针后移
 96         }
 97 
 98         // 两个链表连接过程中,总会有一个链表先被连接完,剩下的链表节点直接连接在后面即可
 99         if (listNode1 == null) {
100             cur.next = listNode2;
101         }
102         if (listNode2 == null) {
103             cur.next = listNode1;
104         }
105         return head.next;
106     }
107 
108 }

 

标签:ListNode,cur,val,23,lists,next,链表,升序
From: https://www.cnblogs.com/yclblogs/p/17283513.html

相关文章

  • 《渗透测试》信息打点-APP资产&知识产权&应用监控&静态提取&动态抓包&动态调试 2023 D
     案例1:名称获取APP信息(爱企查/小蓝本/七麦/点点)1、爱企查知识产权2、七麦&点点查名称https://www.xiaolanben.com/https://aiqicha.baidu.com/https://www.qimai.cn/https://app.diandian.com/ 案例2:URL网站备案查APP1、查备案信息在搜2、网站上有APP下载3、市场......
  • 《渗透测试》信息打点-小程序应用&解包反编译&动态调试&抓包&静态分析&源码架构 2023
     #小程序获取-各大平台&关键字搜索-微信-百度-支付宝-抖音头条 #小程序体验-凡科建站&模版测试上线测试:https://qz.fkw.com/参考:https://blog.csdn.net/qq_52445443/article/details/1223518651.主体结构小程序包含一个描述整体程序的app和多个描述各自页面的pa......
  • 2023 省选游记
    省选观光选手的游记。Day0教练破天荒放了一个上午的假,但因为是寄宿生没办法晚起,被迫来机房搞颓。下午动员大会的时候教练非常有激情,讲的很多,大家也都在笑,感觉省选没什么好担心的。回机房看了几个板子和自己21年的省选做题记录。买晚饭的时候,和zzq讨论有什么会考的科技,zzq直接......
  • 114.二叉树展开为链表 Java
    114.二叉树展开为链表给你二叉树的根结点root,请你将它展开为一个单链表:展开后的单链表应该同样使用TreeNode,其中right子指针指向链表中下一个结点,而左子指针始终为null。展开后的单链表应该与二叉树先序遍历顺序相同。示例1:输入:root=[1,2,5,3,4,null,6]输出......
  • 2023.03.29总结
    题目1:洛谷P2024题意有\(n\)个动物,每个动物都是\(A,B,C\)中的一种,其中\(A\)吃\(B\),\(B\)吃\(C\),\(C\)吃\(A\)。给定两种食物链关系。第一种说法是1XY,表示\(X\)和\(Y\)是同类。第二种说法是2XY,表示\(X\)吃\(Y\)。这两种关系有\(k\)条,一条关系......
  • 【论文速递】WACV2023 - 循环相似注意力的小样本医学图像分割
    【论文速递】WACV2023-循环相似注意力的小样本医学图像分割【论文原文】:Few-shotMedicalImageSegmentationwithCycle-resemblanceAttention获取地址:https://arxiv.org/pdf/2212.03967.pdf博主关键词:小样本学习,语义分割,自监督,原型摘要:近年来,由于医学影像应用需求的不断提高......
  • 【论文速递】WACV2023 - CellTranspose:用于细胞实例分割的小样本域自适应
    【论文速递】WACV2023-CellTranspose:用于细胞实例分割的小样本域自适应【论文原文】:CellTranspose:Few-shotDomainAdaptationforCellularInstanceSegmentation获取地址:https://openaccess.thecvf.com/content/WACV2023/papers/Keaton_CellTranspose_Few-Shot_Domain_Adap......
  • 【论文速递】PR2023 - 基于自正则原型网络的小样本语义分割
    【论文速递】PR2023-基于自正则原型网络的小样本语义分割【论文原文】:Self-RegularizedPrototypicalNetworkforFew-ShotSemanticSegmentation获取地址:https://arxiv.org/pdf/2210.16829.pdf博主关键词:小样本学习,语义分割,自正则,原型网络摘要:用于图像语义分割的深度cnn通常......
  • 2023 - Dubbo 谷歌编程之夏报名启动了!
    作者:Dubbo社区我们很高兴地宣布ApacheDubbo已正式参与到GSoC2023(2023谷歌编程夏令营)中,当前贡献者报名阶段也已经正式启动,如果您对Dubbo、对GSoC、对开源感兴趣,欢迎报名参与。今年的活动同时对在校大学生、社会员工开放。也就是说,只要是对开源和编码感兴趣的开发者就可以......
  • 230123-Git命令行代理及加速设置
    ⭐️方法1:设置全局国内/国外代理gitconfig--globalhttp.proxyhttp://127.0.0.1:XXXXgitconfig--globalhttps.proxyhttp://127.0.0.1:XXXX⭐️方法2:仅设置github的代理gitconfig--globalhttp.https://github.com.proxyhttp://127.0.0.1:XXXXgitconfig--globalhttp......