题目地址(23. 合并K个升序链表)

Posted 潜行前行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题目地址(23. 合并K个升序链表)相关的知识,希望对你有一定的参考价值。

题目地址(23. 合并K个升序链表)

https://leetcode-cn.com/problems/merge-k-sorted-lists/

题目描述

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

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

 

示例 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

关键点

  • 最小堆 以及 小心 循环问题

代码

  • 语言支持:Java

Java Code:


/**
 * Definition for singly-linked list.
 * public class ListNode 
 *     int val;
 *     ListNode next;
 *     ListNode() 
 *     ListNode(int val)  this.val = val; 
 *     ListNode(int val, ListNode next)  this.val = val; this.next = next; 
 * 
 */
class Solution 
    public ListNode mergeKLists(ListNode[] lists) 
        PriorityQueue<ListNode> stack = new PriorityQueue<>( (a,b) -> a.val - b.val);
        for(ListNode node : lists)
            ListNode tmp = node;
            while(tmp!=null)
                stack.add(tmp);
                tmp = tmp.next;
            
        
        ListNode head = !stack.isEmpty() ? stack.poll() : null;
        ListNode tmp = head;
        while(!stack.isEmpty())
            tmp.next = stack.poll();
            tmp.next.next = null;
            tmp = tmp.next;
        
        return head;
    


以上是关于题目地址(23. 合并K个升序链表)的主要内容,如果未能解决你的问题,请参考以下文章

打卡算法23合并K个升序链表 算法解析

打卡算法23合并K个升序链表 算法解析

302.LeetCode | 23. 合并K个升序链表

23. 合并K个升序链表(困难)-归并排序小顶堆

Leetcode23. 合并K个升序链表(优先队列)

精选力扣500题 第18题 LeetCode 23. 合并K个升序链表c++详细题解