【无标题】

在这里插入图片描述
代码思路:
用最小堆初始把所有链表的头节点入堆,然后不断弹出堆中最小节点x,如果x.next不为空就加入堆中,循环直到堆为空,把弹出的节点按顺序拼接起来,就得到答案。

ListNode.__lt__= lambda a,b:a.val<b.val # 让堆比较节点大小
class Solution:
    def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:
        cur = dummy = ListNode()# 哨兵节点,作为合并后链表头节点的前一个节点
        h = [head for head in lists if head] # 初始把所有链表的头节点入堆
        heapify(h)# 堆化
        while h:# 循环直到堆为空
            node = heappop(h)# 节点中的最小节点
            if node.next:# 下一个节点不为空
                heappush(h,node.next)# 下一个节点有可能是最小节点,入堆
            cur.next = node # 合并到新链表中
            cur = cur.next # 准备合并下一个节点
        return dummy.next# 哨兵节点的下一个节点就是新链表的头节点

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值