链表有环问题及入环节点数学原理解析

先上代码:下面这段代码仅判断一个链表是否有环,有环的话,单链表的形状只可能是”O”型或者是“P”型class Node{ int value; Node next; public node(int value){ this.value = value; }}public class Circle { /** * ...
摘要由CSDN通过智能技术生成

先上代码:下面这段代码仅判断一个链表是否有环,有环的话,单链表的形状只可能是”O”型或者是“P”型

class Node{
     int value;
     Node next;
     public node(int value){
         this.value = value;
     }
}
public class Circle {
    /**
     * 判断链表是否有环,快慢指针法,一个一次走两步,一个一次走一步,如果会相遇则表示有环,如果无环的话,就是遇到null。、
     * 链表中有环,只可能是O型或者是P型
     */
     public static boolean circle(Node head){
        if(head == null || head .next == null || head.next.next == null){
            return false;
        }
        Node fast = head.next.next;//为什么起始值得先跑一步或者两步了,因为循环的条件是快慢指针不等
        Node slow = head.next;
        while(fast != slow){
            if(fast.next != null && fast.next.next != null){//快指针先趟雷null,没有null,一次移动两步
                fast = fast.next.next;
                slow = slow.next;//fast如果没遇到null,那么slow也不会遇到null
            }else{
                return false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值