题目
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
Swift解法
class Solution {
func mergeKLists(_ lists: [ListNode?]) -> ListNode? {
var node: ListNode?
var tail: ListNode?
var listHeads = lists.filter({$0?.val != nil}).map({$0})
listHeads.sort { (lhs, rhs) -> Bool in
return (lhs?.val)! < (rhs?.val)!
}
while listHeads.count > 0 {
if node == nil {
node = ListNode(listHeads[0]!.val)
tail = node
} else {
tail?.next = ListNode(listHeads[0]!.val)
tail = tail?.next
}
if listHeads[0]?.next != nil {
listHeads[0] = listHeads[0]?.next
var i = 0
while i + 1 < listHeads.count {
let nextIndex = i + 1
if listHeads[0]!.val > listHeads[nextIndex]!.val {
i = nextIndex
} else {
break
}
}
if i > 0 {
let item = listHeads.removeFirst()
listHeads.insert(item, at: i)
}
} else {
listHeads.removeFirst()
}
}
return node
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-k-sorted-lists