LeetCode 876 Easy 链表求中点 Python

75 篇文章 0 订阅
72 篇文章 0 订阅

    很关键!

    用快慢指针求链表中点!

    快指针每次走2步,

    慢指针每次走1步

     2*t = s

     t = 1/2 s

     注意while循环的条件!

        fast首先不为None,且fast.next 也不为None,fast才可以一下走两步!要想清楚条件!不要就写上不管了

        如果条件只有fast != None,那么当链表为1时,fast会尝试从1往后跳两步!就错了!

        事实上

            要用fast != None and fast.next != None一个是很直观的因为fast=fast.next.next

            要用这个限制,再一个是因为链表的长度不是奇数,就是偶数,那么fast从当前位置开始一次跨越两步

            共经历了3个元素,间隔为2,所以链表长度为大于等于3的奇数时,可以直接跳到后面fast指向最后一个数,

            如12345中的5,如果是偶数,会扩充长度,走到最末端奇数位置的那个None,如1234None

            但是如果链表长度小于3,不加限制条件fast.next != None可能就会出问题!

            12,fast跳到12None的None

            但是1的话,fast应该不跳!

            所以好好品一品这里的while条件,不要再写错了!!!

    复杂度:

        时间:ON,遍历一遍节点

        空间:O1,常数级

def middleNode(self, head):

    fast = slow = head

    while fast and fast.next:

        fast = fast.next.next

        slow = slow.next

    return slow

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值