Skip to content

Instantly share code, notes, and snippets.

@RobGThai
Created October 21, 2021 14:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RobGThai/59434b663a3582b82508eb31bcad2dbf to your computer and use it in GitHub Desktop.
Save RobGThai/59434b663a3582b82508eb31bcad2dbf to your computer and use it in GitHub Desktop.
Merging K sorted list using divide and conquer technique.
# 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[Optional[ListNode]]) -> Optional[ListNode]:
if not lists:
return None
s = len(lists)
if s == 1:
return lists[0]
mid = s // 2
l = self.mergeKLists(lists[:mid])
r = self.mergeKLists(lists[mid:])
return self.merge(l, r)
def merge(self, l: Optional[ListNode], r: Optional[ListNode]) -> Optional[ListNode]:
head = tail = ListNode(0)
while l and r:
if l.val <= r.val:
tail.next = l
l = l.next
else:
tail.next = r
r = r.next
tail = tail.next
tail.next = l or r
return head.next
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment