leetcode 23 合并k个排序链表

本文介绍了一种高效算法,用于合并多个已排序的链表。通过两种方法实现:一是将所有元素放入列表并排序,再构建新链表;二是使用heapq模块进行排序并构建链表。这两种方法均可解决LeetCode上的合并K个排序链表问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

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

示例:

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

解题思路一

虽然难度是hard,但是这题用暴力解法效率也还不错。

1、将所有链表的元素放到一个列表中

2、列表中的元素进行排序

3、用排好序的元素生成新的链表。

直接上代码吧,没有需要特别说明的地方。

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

class Solution:
    def mergeKLists(self, lists: List[ListNode]) -> ListNode:
        temp = []
        head = ListNode(0)
        q = head 
        for l in lists:
            while l:
                temp.append(l.val)
                l = l.next 
        temp.sort()
        for each in temp:
            q.next  = ListNode(each)
            q = q.next
        return head.next

解题思路二

利用模块 heapq 进行排序,然后构造链表。可以学习一下这个队列,感觉是一个trick。

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

class Solution:
    def mergeKLists(self, lists: List[ListNode]) -> ListNode:
        import heapq
        head = ListNode(0)
        temp = head
        heap = []

        for l in lists:
            while l:
                heapq.heappush(heap,l.val)
                l = l.next 

        while heap:
            val = heapq.heappop(heap)#按照升序pop数据。
            temp.next = ListNode(val)
            temp = temp.next
        #temp.next = None
        return head.next

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-k-sorted-lists
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nobrody

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值