Problem
# Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
AC
# TODO: Runtime Error in python3, while ac in python2
class ListNode():
def __init__(self, x):
self.val = x
self.next = None
class Solution():
def mergeKLists(self, x):
if not x:
return
cur = dummy = ListNode(0)
import heapq
minHeap = [(l.val, l) for l in x if l]
heapq.heapify(minHeap)
while minHeap:
cur.next = heapq.heappop(minHeap)[1]
cur = cur.next
if cur.next:
heapq.heappush(minHeap, (cur.next.val, cur.next))
return dummy.next
if __name__ == "__main__":
list1, list1.next = ListNode(2), ListNode(4)
list2, list2.next = ListNode(1), ListNode(3)
list3 = ListNode(7)
result = Solution().mergeKLists([list1, list2, list3])
assert '{0}->{1}->{2}->{3}->{4}'.format(result.val, result.next.val, result.next.next.val,
result.next.next.next.val, result.next.next.next.next.val) \
== '1->2->3->4->7'
Error
但是在LeetCode提交时,如果选择 python3 解释器会报错:
具体原因见我的另一篇博客:python3 调用heapq库 时遭遇 “TypeError: unorderable types”
解决方案:
临时换个解释器就行。