判断单链表是否有环

判断单链表是否有环

使用快慢指针的方式判断链表十分有环。

public ListNode detectCycle(ListNode head) {
        if(head == null) return null;
        //定义快慢指针
        ListNode fast_P = head, slow_P = head;
        //只要后面有路,两指针就继续追逐
        while(fast_P.next != null && fast_P.next.next != null ){
            //移动
            fast_P = fast_P.next.next;
            slow_P = slow_P.next;
            //判断是否相遇
            if(fast_P == slow_P){
                //相遇证明有环,有环就需要找环开始的位置
                //存在关系:相遇点到环的第一个节点距离==链表节点到环的第一个节点距离
                ListNode p = head;
                while(slow_P != p) {
                    slow_P=slow_P.next;
                    p=p.next;
                }
                return p;
            }
        }

        //没有环,快指针肯定先遇到null,跳出循环,返回null即可
        return null;
    }
posted @   鸭梨的药丸哥  阅读(3)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示