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

题目链接
难度: 困难       类型:链表


合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

示例

输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6

解题思路


将k个链表建立成一个最小堆,再从堆顶pop()出每一个元素,连接成链表

heapq是python的内置模块,介绍几个简单的用法:
heap.heapify(x): 将x (list 类型) 转化成最小堆,in-place, 时间复杂度O(len(x))
heap.heappop(heap): 返回root节点,即heap中最小的元素

代码实现

import heapq
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def mergeKLists(self, lists):
        """
        :type lists: List[ListNode]
        :rtype: ListNode
        """
        nums = []
        for l in lists:
            while l:
                nums.append(l.val)
                l = l.next
        heapq.heapify(nums)
        head = ListNode(0)
        cur = head
        while nums:
            cur.next = ListNode(heapq.heappop(nums))
            cur = cur.next
        return head.next
            

本文链接:https://www.jianshu.com/p/5b7bd4dd39c3

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Heap in python Heap,即堆,也就是优先队列。我们可以在这里找到[]维基百科](https://e...
    英武阅读 7,770评论 0 51
  • 0.目录 1.优先队列ADT 2.几种实现 3.二叉堆 4.d-堆 5.左式堆 6.斜堆 7.二项队列 8.斐波那...
    王侦阅读 8,529评论 1 2
  • 本文首发于我的个人博客:尾尾部落 排序算法是最经典的算法知识。因为其实现代码短,应该广,在面试中经常会问到排序算法...
    繁著阅读 10,037评论 3 118
  • 我有一个战友,今年32岁,年龄倒是不大,但是这样的年龄在部队里已经足够让我们喊他老李了。老李很顾家,每个月发了工资...
    兵心砺剑阅读 2,563评论 0 0
  • 随笔 20181121/张苗 分享第63天 今天自习加辅导,下班太晚,路上就在想,这么晚到家,孩子会不会洗...
    苗_d759阅读 1,067评论 0 0

友情链接更多精彩内容