leetcode热题100——day33
23. 合并 K 个升序链表
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
AC代码
/*** 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) {// 判断边界if(lists == null || lists.length <= 0){return null;};// 初始化最小堆(优先级队列),升序排序PriorityQueue<ListNode> minHeap = new PriorityQueue<>((a,b) -> a.val - b.val);// 将列表中所有头节点加入堆for (ListNode head: lists) {// 跳过空节点if(head != null){minHeap.offer(head);};};// 创建新链表ListNode dummy = new ListNode(0);// 新链表当前节点ListNode cur = dummy;// 循环弹出堆顶点while(!minHeap.isEmpty()){// 堆中的当前节点,poll()获取的同时将此节点踢出ListNode smallest = minHeap.poll();cur.next = smallest; //合并链表cur = cur.next; //移动节点// 判断smallest是否还有下一个结点if(smallest.next != null){// 有就加入堆minHeap.offer(smallest.next);};};return dummy.next;}
}