题目
基本思路
借助python的heapq模块,来创建一个小根堆,将所有节点放入这个小根堆中,然后依次将堆顶元素组合成结果链表
- 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 = None
import heapq
class 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