Merge k Sorted Lists
Problem page:https://leetcode.com/problems/merge-k-sorted-lists
Solution
class Solution:
def helper(self, l1, l2):
dummy = ListNode(0)
cur = dummy
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 or l2
return dummy.next
def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:
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.helper(left,right)
Complexity
- time: O(n * log m) n is the number of nodes, m is the number of lists
- space: O(log m)