LeetCode题库-Swift解题

23. 合并K个排序链表(Swift版)

2019-01-23  本文已影响9人  Mage

一、题目

合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:

输入:
[
  1->4->5,
  1->3->4,
  2->6
]
输出: 1->1->2->3->4->4->5->6

二、解题

三、代码实现

    class Solution {
        func mergeKLists(_ lists: [ListNode?]) -> ListNode? {
            return partition(lists, 0, lists.count - 1)
        }
        func partition(_ lists: [ListNode?], _ left: Int, _ right: Int) -> ListNode? {
            if left == right {
                return lists[left]
            }
            
            if left < right {
                let mid = (left + right) / 2
                let l1 = partition(lists, left, mid)
                let l2 = partition(lists, mid + 1, right)
                return mergeTwoList(l1, l2)
            }
            return nil
        }
        func mergeTwoList(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? {
            if l1 == nil {
                return l2
            }
            if l2 == nil {
                return l1
            }
            
            if l1!.val > l2!.val {
                let tempNode = l2
                tempNode?.next = mergeTwoList(l1, l2?.next)
                return tempNode
            } else {
                let tempNode = l1
                tempNode?.next = mergeTwoList(l1?.next, l2)
                return tempNode
            }
        }
    }

Demo地址:github

上一篇下一篇

猜你喜欢

热点阅读