23. Merge k Sorted Lists
Problem
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Related Topics:
Linked List Divide and Conquer Heap
Analysis
方法一:按顺序纵向遍历。
方法二:利用优先队列,减少每次查找最小值所耗费的时间。
方法三:分治,两两合并。
Code
纵向遍历:
/**
* Definition for singly-linked list.
* class ListNode(var `val`: Int = 0) {
* var next: ListNode? = null
* }
*/
class Solution {
fun mergeKLists(lists: Array<ListNode?>): ListNode? {
val head = ListNode(0)
var node = head
var min: Int
var index: Int
while (true) {
min = Int.MAX_VALUE
index = -1
for (i in lists.indices) {
if (lists[i] != null && min >= lists[i]!!.`val`) {
min = lists[i]!!.`val`
index = i
}
}
if (index == -1) {
break
}
node.next = lists[index]
node = node.next!!
lists[index] = lists[index]!!.next
}
return head.next
}
}优先队列:
分治:
Last updated