题目描述:
方法一:分治
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def mergeKLists(self, lists: List[ListNode]) -> ListNode: if not lists:return return self.merge(lists,0,len(lists)-1) def merge2lists(self,l1,l2): if not l1:return l2 if not l2:return l1 if l1.val<l2.val: l1.next = self.merge2lists(l1.next,l2) return l1 else: l2.next = self.merge2lists(l1,l2.next) return l2 def merge(self,lists,left,right): if left==right: return lists[left] mid = (right-left)//2 + left l1 = self.merge(lists,left,mid) l2 = self.merge(lists,mid+1,right) return self.merge2lists(l1,l2)
方法二:优先级队列
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def mergeKLists(self, lists: List[ListNode]) -> ListNode: import heapq dummy = ListNode(0) p = dummy head = [] for i in range(len(lists)): if lists[i] : heapq.heappush(head, (lists[i].val, i)) lists[i] = lists[i].next while head: val, idx = heapq.heappop(head) p.next = ListNode(val) p = p.next if lists[idx]: heapq.heappush(head, (lists[idx].val, idx)) lists[idx] = lists[idx].next return dummy.next