• 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

  • 相关阅读:
    POJ 2388
    POJ 2387
    POJ 2389
    POJ 2379
    POJ 2385
    文件及输入输出流模拟ATM机
    文件及输入输出流模拟学生系统
    第六讲 字符串
    第四节课练习
    第四次上课练习
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14164319.html
Copyright © 2020-2023  润新知