合并k个链表

首先想到的是暴力法,搜索了部分函数,得到结果,发现效率也挺高。

class Solution:
    def mergeKLists(self, lists: List[ListNode]) -> ListNode:
        self.nodes = []
        head = point = ListNode(0)# 设置哨兵节点
        for l in lists: # 循环遍历列表中每一个链表,将元素添加进数组。
            while l:# 将当前链表中的元素进行添加
                self.nodes.append(l.val)
                l = l.next
        for x in sorted(self.nodes):# 将排序之后的数组中的元素,构造链表。
            point.next = ListNode(x)
            point = point.next
        return head.next

在这里插入图片描述

Class Solution(object):
    def mergeKLists(self, lists):
        """
        :type lists: List[ListNode]
        :rtype: ListNode
        """
        amount = len(lists) # 计算出K的数值
        interval = 1 # 间距
        while interval < amount:# 先从间距1开始合并,
            for i in range(0, amount - interval, interval * 2):
                lists[i] = self.merge2Lists(lists[i], lists[i + interval])# 使用两个链表的合并函数进行合并。
            interval *= 2# 当上一次间距合并完之后,将间距扩大为2倍。
        return lists[0] if amount > 0 else lists # 当列表链表数大于0时,返回第一个链表(排序好的链表)。

    def merge2Lists(self, l1, l2):# 两个链表进行合并成一个链表。
        head = point = ListNode(0)# 设置哨兵节点
        while l1 and l2:
            if l1.val <= l2.val:
                point.next = l1
                l1 = l1.next
            else:
                point.next = l2
                l2 = l1
                l1 = point.next.next
            point = point.next
        if not l1:#  其中一个链表不为空,就将其添加到后面。
            point.next=l2
        else:
            point.next=l1
        return head.next

分治法还是很好理解的,但是在函数实现的过程就没那么容易,搜索函数得到函数实现的功能。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值