python判断链表是否有环

思路:使用快慢指针,快指针每次走两步,慢指针每次走一步,如果有环,则一定会快慢指针指向同一结点;
假设环的长度为n,先让一个指针走n步,另一个再开始走,当他们指针指向同一结点时,该结点就是环入口点
(在快慢指针相遇之后,慢指针指向表头,快指针留在相遇点,二者以每次一步走直到相遇,该相遇点就是环入口结点);

找到环入口结点之后,从入口结点开始遍历,每次遍历长度加一,如果下个结点等于入口结点,则返回长度

复制代码
class ListNode(object):
    def __init__(self, dataval):
        self.dataval = dataval
        self.next = None


class JudgeLinkRing(object):
    def is_link_ring(self,head):
        if head is  None or head.next is None:
            return 
        slow,fast=head,head
        while fast and fast.next:
            slow=slow.head
            fast=fast.next.next
            if slow==fast:
                slow=head
                while slow !=fast:
                    slow=slow.next
                    fast=fast.next
                fast1=fast
                fast=fast.next
                n=1
                while fast1 !=fast 
                    fast=fast.next
                    n=n+1

                return slow,n

        return 
复制代码

 

posted on   HHMLXL  阅读(451)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示