一.题目:
合并K个有序链表.
二.解题思路:
利用最小堆排序,堆中元素为元组(包括链表节点和对应的值),每次取出堆顶元素,并将该元素所在链表的下个节点放入堆中,直至所有链表的节点都已访问.
代码如下:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def mergeKLists(self, lists):
"""
:type lists: List[ListNode]
:rtype: ListNode
"""
#创建一个最小堆,堆中元素为元组,包括节点值和节点本身
heap = []
for node in lists:
if node:
heap.append((node.val, node))
heapq.heapify(heap)
#创建一个新链表
head = ListNode(0)
curr = head
while heap:
pop = heapq.heappop(heap)
curr.next = ListNode(pop[0])
curr = curr.next
if pop[1].next:
heapq.heappush(heap, (pop[1].next.val, pop[1].next))
return head.next