【算法刷题】python刷题--合并链表

[23] 合并 K 个升序链表

python 复制代码
from typing import List,Optional
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
        


# @lc code=start
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next

import heapq


class Solution:
    def mergeKLists(self, lists: List[ListNode]) -> ListNode:
        if not lists:
            return None
        pq = []
        dummy = ListNode(-1)
        p = dummy
        for head in lists:
            if head:
                heapq.heappush(pq,(head.val,id(head),head))
        while pq:
            node = heapq.heappop(pq)[2]
            p.next = node
            if node.next:
                heapq.heappush(pq,(node.next.val,id(node.next),node.next))
            # p指针不断前进
            p = p.next
        return dummy.next

注意点1

对 head是否为None的判断必须有:

    for head in lists:
            if head:
                heapq.heappush(pq,(head.val,id(head),head

否则过不了测试用了[None]

while pq:

p.next = node

或者 p.next = ListNode(node.val) 无区别

因为p.next 会被覆盖成小顶堆的最小值,知道没值了,指向None

相关推荐
我的运维人生4 分钟前
Python技术深度探索:从基础到进阶的实践之旅(第一篇)
开发语言·python·运维开发·技术共享
Bonne journée6 分钟前
‌在Python中,print(f‘‘)是什么?
java·开发语言·python
秋夜Autumn21 分钟前
贪心算法相关知识
算法·贪心算法
iiimZoey30 分钟前
Dit架构 diffusion范式分类+应用
人工智能·python
R三哥哥啊31 分钟前
【树莓派5B】IO串口通信使用
python
小懒编程日记33 分钟前
【数据结构与算法】B树
java·数据结构·b树·算法
心怀花木40 分钟前
【算法】双指针
c++·算法
闫铁娃41 分钟前
二分解题的奇技淫巧都有哪些,你还不会吗?
c语言·数据结构·c++·算法·leetcode
Y_3_743 分钟前
【回溯数独】有效的数独(medium)& 解数独(hard)
java·数据结构·windows·算法·dfs·回溯
互联网时光机1 小时前
python写的window小工具-一键设置ip自动获取ip
网络·windows·python