problems(swift): add “23. Merge k Sorted Lists”
Signed-off-by: Matej Focko <mfocko@redhat.com>
This commit is contained in:
parent
c1f7120274
commit
5fd8a18ef0
1 changed files with 41 additions and 0 deletions
41
problems/swift/merge-k-sorted-lists.swift
Normal file
41
problems/swift/merge-k-sorted-lists.swift
Normal file
|
@ -0,0 +1,41 @@
|
|||
/**
|
||||
* Definition for singly-linked list.
|
||||
* public class ListNode {
|
||||
* public var val: Int
|
||||
* public var next: ListNode?
|
||||
* public init() { self.val = 0; self.next = nil; }
|
||||
* public init(_ val: Int) { self.val = val; self.next = nil; }
|
||||
* public init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next; }
|
||||
* }
|
||||
*/
|
||||
class Solution {
|
||||
func mergeKLists(_ lists: [ListNode?]) -> ListNode? {
|
||||
var lists = lists.filter { $0 != nil }
|
||||
let root = ListNode()
|
||||
|
||||
var node = root
|
||||
while !lists.isEmpty {
|
||||
// find the next list
|
||||
var minIdx = 0
|
||||
for i in 1..<lists.count {
|
||||
if lists[i]!.val < lists[minIdx]!.val {
|
||||
minIdx = i
|
||||
}
|
||||
}
|
||||
|
||||
// insert the list into the node
|
||||
node.next = lists[minIdx]
|
||||
node = lists[minIdx]!
|
||||
|
||||
// shift the list at the index or remove it
|
||||
if lists[minIdx]!.next == nil {
|
||||
lists.remove(at: minIdx)
|
||||
} else {
|
||||
lists[minIdx] = lists[minIdx]!.next
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return root.next
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue