本文共 1027 字,大约阅读时间需要 3 分钟。
借助python的heapq模块,来创建一个小根堆,将所有节点放入这个小根堆中,然后依次将堆顶元素组合成结果链表
heappush(heap, x) 将 x 入堆heappop(heap) 将堆属性中的最小元素弹出 heapify(heap) 将 heap 属性强制应用到任意一个列表heapreplace(heap, x) 将堆中的最小的元素弹出,同时将 x 入堆merge() 多个堆合并 nlargest(n, iter) 返回 iter 中的第 n 大的元素nsmallest(n, iter) 返回 iter 中的第 n 小的元素
将所有链表的节点 push 到堆中,每次把最小的 pop 出来
# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneimport heapqclass Solution(object): def mergeKLists(self, lists): """ :type lists: List[ListNode] :rtype: ListNode """ heap = [] for node in lists: while node: heapq.heappush(heap, node.val) node = node.next temp = ListNode(-1) head = temp while heap: smallestNodeVal = heapq.heappop(heap) temp.next = ListNode(smallestNodeVal) temp = temp.next return head.next