package LeetCode_23 import java.util.* /** * 23. Merge k Sorted Lists * https://leetcode.com/problems/merge-k-sorted-lists/description/ * * Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. Example: Input: [ 1->4->5, 1->3->4, 2->6 ] Output: 1->1->2->3->4->4->5->6 * */ class ListNode(var `val`: Int) { var next: ListNode? = null } class Solution { /* * use priorityQueue, can use for linked list or array * Time complexity: O(nklogk), * n is the size of list, k is the size of priorityQueue, each execute in priorityQueue is logk * Space: O(k)+O(n) * */ fun mergeKLists(lists: Array<ListNode?>): ListNode? { val minHeap = PriorityQueue<ListNode> { a, b -> a.`val` - b.`val` } val dummy = ListNode(-1) for (node in lists) { if (node != null) { minHeap.offer(node) } } var cur = dummy while (minHeap.isNotEmpty()) { val node = minHeap.poll() cur.next = node if (node.next != null) { minHeap.offer(node.next) } cur = cur.next!! } return dummy.next } }