面试热题(合并K个升序链表)

这篇具有很好参考价值的文章主要介绍了面试热题(合并K个升序链表)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

输入: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

       这道题看似困难题,其实还是比较容易好想的,我们可以维护一个优先最小队列,然后声明一个虚拟头结点,每次出一个最小的节点挂载在已经挂载节点的后面,当队列为空时,就说明我们K个升序列表已经合并完成

面试热题(合并K个升序链表),热题Hot100,面试,链表

 文章来源地址https://www.toymoban.com/news/detail-650324.html

public ListNode mergeKLists(ListNode[] lists) {
     if(lists==null||lists.length==0){
         return null;
     }
     //自定义比较器
     PriorityQueue<ListNode> queue=new PriorityQueue<>(new Comparator<ListNode>() {
         @Override
         public int compare(ListNode o1, ListNode o2) {
             return o1.val-o2.val;
         }
     });
     //将K个节点的头结点入队
     for(ListNode node:lists){
         if(node!=null){
           queue.offer(node);
         }
     }
     //创建一个虚拟头结点
     ListNode dummyNode=new ListNode(-1);
     ListNode curNode=dummyNode;
     while(!queue.isEmpty()){
         ListNode cur=queue.poll();
         curNode.next=cur;
         //更新curNode
         curNode=curNode.next;
         //如果当前节点的next不为空,则让下一个节点进行入队
         if(cur.next!=null){
             queue.offer(cur.next);
         }
     }
     return dummyNode.next;
    }

到了这里,关于面试热题(合并K个升序链表)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 合并两个有序链表,将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

    题记: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入 :l1 = [1,2,4], l2 = [1,3,4] 输出 :[1,1,2,3,4,4] 示例 2: 输入 :l1 = [], l2 = [] 输出 :[] 示例 3: 输入 :l1 = [], l2 = [0] 输出 :[0] 提示: 两个链表的节点数

    2024年02月07日
    浏览(49)
  • 《LeetCode 热题 HOT 100》——寻找两个正序数组的中位数

    本期给大家带来的是是《 LeetCode 热题 HOT 100 》第四题—— 寻找两个正序数组的中位数的 题目讲解 !!!() 本文目录 💥题意分析 💥解题思路: 1、直接法  (❌) 2、归并思想 (❌) ①《LeetCode》第88题——合并两个有序数组 3、二分查找(✔️) 整体思想: 题目如下

    2023年04月27日
    浏览(31)
  • 合并K个升序链表(LeetCode 23)

    给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 示例 2: 示例 3: Hard。 ★★★★☆ 我们可以想到一种最朴素的方法,依次将链表数组中的链表与最终结果合并。问题便退化成合并两个有序链表。 如何

    2024年01月19日
    浏览(26)
  • 23. 合并 K 个升序链表(递归分治)

    这是我的第一个自己ak的分治题目!!!好耶!!(骄傲脸 思路参考:148. 排序链表(归并排序)

    2024年01月16日
    浏览(24)
  • LeetCode23.合并K个升序链表

    给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 输入: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 要将多个已按升序排

    2024年02月21日
    浏览(26)
  • LeetCode 23 合并 K 个升序链表

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/merge-k-sorted-lists/description/ 博主Github :https://github.com/GDUT-Rp/LeetCode 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例1 : 示例2 : 示例3 : 提示: k == lists.length

    2024年02月10日
    浏览(22)
  • Leetcode—23.合并 K 个升序链表【困难】

    用容量为K的最小堆优先队列,把链表的头结点都放进去,然后出队当前优先队列中最小的,挂上链表,,然后让出队的那个节点的下一个入队,再出队当前优先队列中最小的,直到优先队列为空。 之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,

    2024年01月25日
    浏览(27)
  • LeetCode 热题 100 | 链表(上)

    目录 1  基础知识 1.1  空指针 1.2  结构体 1.3  指针访问 1.4  三目运算符 2  160. 相交链表 3  206. 反转链表 4  234. 回文链表 菜鸟做题第三周,语言是 C++ 1  基础知识 1.1  空指针 使用 nullptr 来判断是否为空指针: “NULL 在 C++ 中就是 0,这是因为在 C++ 中 void* 类型是不允许隐式

    2024年02月19日
    浏览(32)
  • LeetCode热题100——链表

    给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回

    2024年02月05日
    浏览(33)
  • 【力扣每日一题】2023.8.12 合并K个升序链表

    目录 题目: 示例: 分析: 代码: 题目给我们一个链表数组,数组里的链表都是升序的,让我们合并这些链表,要求合并之后还是升序的。 最简单最直观的做法就是遍历整个数组,把每个链表的节点都取出来塞到一个容器里,然后对容器进行升序排序,接着按顺序重新串连

    2024年02月13日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包