1. 程式人生 > 實用技巧 >LeetCode23. 合併K個升序連結串列

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