一、题设
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
二、基本思路
利用大小根堆库heapq + ListNode类的比较方法,进行小根堆的自动迭代,首先将所有数据使用heappush方法压入进行小根堆处理的列表中,其次将小根堆中的数按顺序利用heappop方法链接到目标节点上。
三、代码实现
def mergeKLists(self, lists):
# 使得建立heapq时,基于Listnode.val的值建立最小堆.
def __lt__(self, other):
return self.val < other.val
ListNode.__lt__ = __lt__
import heapq
# heap列表 用于建立最小堆
# res链表头 用于存放最终结果
heap = []
res = ListNode(-1)
p = res
# 把所有数压入最小堆中,并自动形成有序
for l in lists:
if l:
heapq.heappush(heap, l)
# 排空最小堆
while heap:
# 将当前堆中最小值挨个加入res链表中
node = heapq.heappop(heap)
p.next = ListNode(node.val)
p = p.next
# 如果下一个不为空,则加入堆中
if node.next:
heapq.heappush(heap, node.next)
return res.next
四、效率总结
本题难点在于如何利用heapq库以及是否对配合heapq库形成小根堆的方法有所涉猎。