zoukankan      html  css  js  c++  java
  • LeetCode23. 合并K个升序链表

    方法1:使用优先队列合并

    方法2:分治法,两两合并

    代码1:优先队列

    class Solution {
        public ListNode mergeKLists(ListNode[] lists) {
            /**
             *  方法1:使用优先队列
             *      把链表的头结点都放进去,然后出队当前优先队列中最小的,接上链表,,
             *      然后让出队的那个节点的下一个入队,再出队当前优先队列中最小的,直到优先队列为空。
             *      注意:优先队列中不能出现 null,要对 null 进行判断
             */
            if (lists == null || lists.length == 0) return null;
            ListNode dummyHead = new ListNode(-1);
            ListNode cur = dummyHead;
            PriorityQueue<ListNode> minHeap = new PriorityQueue<>((o1, o2) -> o1.val - o2.val);
            for (ListNode head : lists) {
                if (head != null) { // 注意
                    minHeap.add(head);
                }
            }
            while (!minHeap.isEmpty()) {
                ListNode temp = minHeap.poll();
                if (temp.next != null) {  // 注意,如果某个链表遍历完了
                    minHeap.add(temp.next);
                }
                cur.next = temp;
                cur = cur.next;
            }
            return dummyHead.next;
        }
    }

    代码2:分治法

    M

  • 相关阅读:
    线程3 线程池和文件下载服务器
    线程 2
    线程 1
    线程间操作
    编写高质量的代码-------从命名开始
    基于.NET平台常用的框架整理
    消息队列
    我是一个线程
    linux 网络命令
    css hack比较全 --- 转
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14164319.html
Copyright © 2011-2022 走看看