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

合并k个已排序的链表

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

使用小顶堆的方式找出最小val值的节点

这里使用heapq这个轻量化的类,运行效率更快

——步骤一: 将lists列表中的元素push到小顶堆中

——步骤二:将小顶堆的堆顶元素弹出,这个就是我们要的最小值

——步骤三:判断链表后续是否还有节点,有的话push到小顶堆中

import heapq
from typing import List

class Solution:
    def mergeKLists(self, lists: List[ListNode]) -> ListNode:
        # 小顶堆:存储 (val, index, node),但其实不需要 node,只需 index 来追踪
        heap = []
        # 初始化堆:把每个非空链表的头节点加入
        for i, node in enumerate(lists):
            if node:
                heapq.heappush(heap, (node.val, i, node))

        dummy = ListNode(-1)
        p = dummy

        while heap:
            val, idx, node = heapq.heappop(heap)
            p.next = node
            p = p.next
            # 如果该链表还有下一个节点,加入堆
            if node.next:
                heapq.heappush(heap, (node.next.val, idx, node.next))

        return dummy.next

全部评论

相关推荐

不愿透露姓名的神秘牛友
05-13 14:16
战争学院:你妈妈第一反应是骗子,我妈妈第一反应是培训贷,全国家长系统是统一的吗哈哈哈
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务