Skip to content

Merge Ksorted Lists

LeetCode Problem

# https://leetcode.com/problems/merge-k-sorted-lists/
# Use D&C : merge sort
class Solution:
    def mergeKLists(self, lists):
        # edge cases
        if not lists:
            return None
        if len(lists) == 1:
            return lists[0]

        mid = len(lists) // 2
        left = self.mergeKLists(lists[:mid])
        right = self.mergeKLists(lists[mid:])
        return self.merge(left, right)

    def merge(self, left, right):
        # edge cases
        if not left or not right:
            return left or right

        if left.val < right.val:
            # left comes first [left -> right] recursively
            left.next = self.merge(left.next, right)
            return left
        right.next = self.merge(left, right.next)
        return right