Leetcode刷题java之23. 合并K个排序链表(一天一道编程题之四十天)(优先队列)
程序员文章站
2022-05-12 16:34:27
...
执行结果:
通过
显示详情
执行用时 :5 ms, 在所有 Java 提交中击败了62.48% 的用户
内存消耗 :41.8 MB, 在所有 Java 提交中击败了55.30%的用户
题目:
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-k-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
将所有链表的头节点维护成一个优先队列,哪个节点出队了,就把它的下一个节点加入。
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
if(lists.length==0)
{
return null;
}
PriorityQueue<ListNode> queue=new PriorityQueue<>(new Comparator<ListNode>(){
public int compare(ListNode a,ListNode b)
{
return a.val-b.val;
}
});
for(ListNode l:lists)
{
if(l!=null)
{
queue.add(l);
}
}
ListNode result=new ListNode(0);
ListNode cur=result;
while(!queue.isEmpty())
{
cur.next=queue.poll();
cur=cur.next;
if(cur.next!=null)
{
queue.add(cur.next);
}
}
return result.next;
}
}