题解 | #合并k个已排序的链表#

合并k个已排序的链表

https://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6

import heapq

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution:
    def mergeKLists(self, lists):
        # 创建一个优先队列
        min_heap = []
        # 初始化,将k个链表的首节点放入优先队列
        for idx, node in enumerate(lists):
            if node:
                heapq.heappush(min_heap, (node.val, idx, node))
        
        # 创建一个哑节点,这将会是合并后链表的头节点的前驱
        dummy = ListNode(0)
        current = dummy
        
        # 当优先队列不为空,循环执行
        while min_heap:
            # 弹出最小元素
            val, idx, node = heapq.heappop(min_heap)
            # 将当前最小节点加入到合并后的链表
            current.next = node
            current = current.next
            # 如果弹出的节点的下一个节点非空,将其加入到优先队列中
            if node.next:
                heapq.heappush(min_heap, (node.next.val, idx, node.next))
        
        # 返回合并后的链表的头节点
        return dummy.next

全部评论

相关推荐

05-12 16:04
已编辑
江西财经大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务