LeetCode python-148. 排序链表

这篇博客探讨了如何使用Python解决LeetCode的148题——排序链表。通过二分法将问题分解,达到nlogn的时间复杂度。作者介绍了两种方法,包括递归操作和利用pre、pre.next更新链表。通过实验,两种方法得到相同的结果,强调理解递归操作和链表排序的关键在于改变next指针。
摘要由CSDN通过智能技术生成

LeetCode python-148. 排序链表

先看题目:

(题目来力扣网站)在这里插入图片描述

思路:

因为时间复杂度是nlogn,所以采用二分法。假设是n = 2^k个输入,经过二分法,有 k = logn层。每一层排序的时间复杂度是n,故整体时间复杂度是nlogn。
方法一:
在 left, right = self.sortList(head), self.sortList(mid)之前实现二分法操作,分到最小单元,即left = None,right = None,之后实现排序操作,再合并,循环,直到head =None或head.next== None。

#归并排序,递归法。
#通过二分法得到最小节点单元,直到left.next = None and right.next = None.然后开始合并
class ListNode(object):
    def __init__(self, val, next=None):
        self.val = val
        self.next = next
class Solution:
    def sortList(self, head):
        if head == None or head.next == None:
            return head     # termination.
        slow, fast = head, head.next#快指针走的是慢指针的两倍,故
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值