1
+ package problems.merge_k_sorted_lists
2
+
3
+ import java.util.*
4
+
5
+ fun main () {
6
+ val result = Solution ().mergeKLists(
7
+ arrayOf(
8
+ getListNodeFromList(listOf (1 , 4 , 5 )),
9
+ getListNodeFromList(listOf (1 , 3 , 4 )),
10
+ getListNodeFromList(listOf (2 , 6 )),
11
+ )
12
+ )
13
+ println (result) // 1, 1, 2, 3, 4, 4, 5, 6
14
+ }
15
+
16
+ class Solution {
17
+ fun mergeKLists (lists : Array <ListNode ?>): ListNode ? {
18
+ if (lists.isEmpty()) return null
19
+ val listNodeQueue = PriorityQueue <ListNode >(compareBy { it.`val ` })
20
+ listNodeQueue.addAll(lists.filterNotNull())
21
+ if (listNodeQueue.isEmpty()) return null
22
+ val firstListNode = listNodeQueue.remove()
23
+ val result = ListNode (firstListNode.`val `)
24
+ if (firstListNode.next != null ) listNodeQueue.add(firstListNode.next)
25
+ var lastListNode: ListNode = result
26
+ while (listNodeQueue.isNotEmpty()) {
27
+ val listNode = listNodeQueue.remove()
28
+ val newListNode = ListNode (listNode.`val `)
29
+ lastListNode.next = newListNode
30
+ lastListNode = newListNode
31
+ if (listNode.next != null ) listNodeQueue.add(listNode.next)
32
+ }
33
+ return result
34
+ }
35
+ }
36
+
37
+ class ListNode (var `val `: Int ) {
38
+ var next: ListNode ? = null
39
+ }
40
+
41
+ private fun getListNodeFromList (list : List <Int >): ListNode ? {
42
+ var result: ListNode ? = null
43
+ for (i in list.size - 1 downTo 0 ) {
44
+ result = ListNode (list[i]).apply { next = result }
45
+ }
46
+ return result
47
+ }
0 commit comments