Skip to content

Commit 451b97f

Browse files
author
g0rd1
committed
1 parent 7de52bf commit 451b97f

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
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

Comments
 (0)