Python描述 LeetCode 23. 合并K个升序链表
Posted 亓官劼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python描述 LeetCode 23. 合并K个升序链表相关的知识,希望对你有一定的参考价值。
Python描述 LeetCode 23. 合并K个升序链表
大家好,我是亓官劼(qí guān jié ),在【亓官劼】公众号、CSDN、GitHub、B站等平台分享一些技术博文,主要包括前端开发、python后端开发、小程序开发、数据结构与算法、docker、Linux常用运维、NLP等相关技术博文,时光荏苒,未来可期,加油~
如果喜欢博主的文章可以关注博主的个人公众号【亓官劼】(qí guān jié),里面的文章更全更新更快。如果有需要找博主的话可以在公众号后台留言,我会尽快回复消息.
本文原创为【亓官劼】(qí guān jié ),请大家支持原创,部分平台一直在恶意盗取博主的文章!!! 全部文章请关注微信公众号【亓官劼】。
题目
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
示例 1:
输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:
[
1->4->5,
1->3->4,
2->6
]
将它们合并到一个有序链表中得到。
1->1->2->3->4->4->5->6
示例 2:
输入:lists = []
输出:[]
示例 3:
输入:lists = [[]]
输出:[]
提示:
k == lists.length
0 <= k <= 10^4
0 <= lists[i].length <= 500
-10^4 <= lists[i][j] <= 10^4
lists[i]
按 升序 排列lists[i].length
的总和不超过10^4
解题思路
和两个链表合并类似,只是这里多个链表需要有个函数来找到当前的最小值的结点
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:
def get_min_node():
min_idx = 0
min_val = lists[min_idx].val
min_node = lists[min_idx]
for idx,item in enumerate(lists):
if item.val < min_val:
min_idx = idx
min_val = item.val
min_node = item
if min_node.next:
lists[min_idx] = lists[min_idx].next
else:
lists.remove(lists[min_idx])
return min_node
sum_none = lists.count(None)
for _ in range(sum_none):
lists.remove(None)
res = ListNode(-1,None)
p = res
while lists:
min_node = get_min_node()
p.next = min_node
p = p.next
return res.next
以上是关于Python描述 LeetCode 23. 合并K个升序链表的主要内容,如果未能解决你的问题,请参考以下文章