合并k个升序链表

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def mergeKLists(self, lists: List[ListNode]) -> ListNode:
        if not lists:
            return None
        length = len(lists) - 1
        return self.merge(lists, 0, length)

    # 归并排序
    def merge(self, lists, left, right):
        if left == right:
            return lists[left]
        
        mid = left + (right - left) // 2
        l1 = self.merge(lists, left, mid)
        l2 = self.merge(lists, mid+1, right)
        return self.merge_tow_list(l1, l2)

    # 合并两个有序链表
    def merge_tow_list(self, l1, l2):
        cur = dummy = ListNode(0)
        while l1 and l2:
            if l1.val < l2.val:
                cur.next = l1
                l1 = l1.next
            else:
                cur.next = l2
                l2 = l2.next
            cur = cur.next

        cur.next = l1 if l1 else l2
        return dummy.next

posted @ 2021-03-07 22:10  KbMan  阅读(35)  评论(0编辑  收藏  举报