lc-23


//You are given an array of k linked-lists lists, each linked-list is sorted in
//ascending order.
//
// Merge all the linked-lists into one sorted linked-list and return it.
//
//
// Example 1:
//
//
//Input: lists = [[1,4,5],[1,3,4],[2,6]]
//Output: [1,1,2,3,4,4,5,6]
//Explanation: The linked-lists are:
//[
//  1->4->5,
//  1->3->4,
//  2->6
//]
//merging them into one sorted list:
//1->1->2->3->4->4->5->6
//
//
// Example 2:
//
//
//Input: lists = []
//Output: []
//
//
// Example 3:
//
//
//Input: lists = [[]]
//Output: []
//
//
//
// Constraints:
//
//
// k == lists.length
// 0 <= k <= 104
// 0 <= lists[i].length <= 500
// -104 <= lists[i][j] <= 104
// lists[i] is sorted in ascending order.
// The sum of lists[i].length will not exceed 104.
//
// Related Topics Linked List Divide and Conquer Heap (Priority Queue) Merge Sor
//t
// 👍 12620 👎 487


//leetcode submit region begin(Prohibit modification and deletion)
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeKLists(ListNode[] lists) {
        if (lists == null || lists.length == 0) {
            return null;
        }
        ListNode head = null, cur = null;
        ListNode[] tempNodes = new ListNode[lists.length];
        for (int i = 0; i < lists.length; i++) {
            tempNodes[i] = lists[i];
        }

        while (true) {
            int minV = Integer.MAX_VALUE;
            ListNode minN = null;
            int i = 0;
            int keyIndex = -1;

            for (ListNode node : tempNodes) {
                if (node != null) {
                    if (node.val < minV) {
                        minN = node;
                        minV = node.val;
                        keyIndex = i;
                    }
                }
                i++;
            }
            if (minN == null) {
                break;
            }

            tempNodes[keyIndex] = tempNodes[keyIndex].next;

            if (head == null) {
                head = minN;
            }
            if (cur != null) {
                cur.next = minN;
            }
            cur = minN;
        }
        return head;
    }

}
//leetcode submit region end(Prohibit modification and deletion)

文章作者: 倪春恩
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 倪春恩 !