合并k个有序链表

合并k个已排序的链表

https://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6?tpId=196&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey

//用优先队列比较大小,用尾插法将较小的节点进行连接。

public ListNode mergeKLists(ArrayList<ListNode> lists) {
        if(lists==null) return null;
        //重写比较器
        PriorityQueue<ListNode> priorityQueue=new PriorityQueue<>(new Comparator<ListNode>() {
            @Override
            public int compare(ListNode o1, ListNode o2) {
                return o1.val-o2.val;
            }
        });
        for (ListNode listNode:lists){
            //对于空节点 需要进行过滤掉
            if (listNode==null) continue;
            priorityQueue.add(listNode);
        }
        ListNode pre = new ListNode(0);
        ListNode res = pre;
        while (priorityQueue.size()>0){
            ListNode ln=priorityQueue.poll();
            pre.next = ln;
            pre=ln;
            if (ln.next!=null) {
                //将弹出节点的下一个节点加入到队列中进行比较
                priorityQueue.add(ln.next);
            }
        }
        return res.next;
    }
全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 18:18
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务