0
点赞
收藏
分享

微信扫一扫

lc23.合并k个升序链表

小飞侠熙熙 2022-02-27 阅读 60
/**
 * 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.length == 0) return null;
        //虚拟头节点
        ListNode dummy = new ListNode(-1);
        ListNode p =dummy;
        //优先队列创建最小堆
        PriorityQueue<ListNode> pq = new PriorityQueue<>(
            lists.length,(a,b)->(a.val-b.val)
        );
        for(ListNode head :lists){
            if (head != null){
                pq.add(head);
            }
        }
        while(!pq.isEmpty()){
            //获取最小节点,接到结果列表中
            ListNode node = pq.poll();
            p.next = node;
            if(node.next != null){
                pq.add(node.next);
            }
            //p指针不断前进
            p = p.next;
        }
        return dummy.next;
    }
}
举报

相关推荐

0 条评论