【Leetcode】23.合并K个升序链表(链表)

leetcode-23.png

21题是两个链表
23题是k个链表
之前判断两个节点皆可,现在是k个节点
思路差不多,就是如何处理k个节点的问题
在这里用小顶堆(优先队列)来处理这个问题
首先将k个链表的头节点放入优先队列
然后在循环中遍历这k个节点
优先队列

class Solution {
    public ListNode mergeKLists(ListNode[] lists) {
        if(lists.length == 0) return null;
        ListNode head = new ListNode(-1);
        ListNode p = head;
        PriorityQueue<ListNode> pq = new PriorityQueue<>(lists.length, (a, b)->(a.val - b.val));
        for(ListNode h : lists){
            if(h != null){
                pq.add(h);
            }
        }
        while(!pq.isEmpty()){
            ListNode node = pq.poll();
            p.next = node;
            if(node.next != null){
                pq.add(node.next);
            }
            p = p.next;
        }
        return head.next;
    }
}

哪个链表的节点首先出队列,就先将这个链表接下来的节点放入队列

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容