# Leetcode 23. Merge k Sorted Lists ```python= # 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]: def merge(list1: ListNode, list2: ListNode): dummy = ListNode() p = dummy l1 = list1 l2 = list2 while l1 and l2: if l1.val < l2.val: p.next = l1 l1 = l1.next else: p.next = l2 l2 = l1 l1 = p.next.next p = p.next if not l1: p.next = l2 else: p.next = l1 return dummy.next amount = len(lists) interval = 1 while interval < amount: for i in range(0, amount - interval, interval * 2): lists[i] = merge(lists[i],lists[i+interval]) interval *= 2 return lists[0] if amount > 0 else None ``` 2023.09.06 AC <iframe width="560" height="315" src="https://www.youtube.com/embed/q5a5OiGbT6Q?si=JjJmpYXQJz-Bn1Ns" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe> <br></br> ```python=! # 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]: def merge(list1: ListNode, list2: ListNode): dummy = ListNode() cur = dummy while list1 and list2: if list1.val < list2.val: cur.next = list1 list1 = list1.next else: cur.next = list2 list2 = list2.next cur = cur.next if list1: cur.next = list1 else: cur.next = list2 return dummy.next if len(lists) == 0: return None while len(lists) > 1: l = [] for i in range(0,len(lists),2): list1 = lists[i] list2 = lists[i+1] if i + 1 < len(lists) else None # 如果超出就給空鏈表 l.append(merge(list1,list2)) lists = l return lists[0] ```