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个升序链表的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode-23. 合并K个排序链表

LeetCode 23. 合并K个排序链表(Merge Two Sorted Lists)

leetcode.23合并 k 个排序链表

leetcode 23 合并 k 个有序链表

LeetCode 第23题 合并K个排序链表

[LeetCode]23. 合并K个排序链表(优先队列;分治待做)