定义2个指针,fast与slow,初始值均指向链表头,同时移动,fast移动2步,slow移动1步,快指针每移动一次都要与慢指针比较,直到快指针与慢指针相等为止,证明有环,否则无环(fast先到尾部)
public class IsLoop {
public static void main(String[] args){
Node n1=new Node(5);
Node n2=new Node(3);
Node n3=new Node(9);
Node n4=new Node(2);
n1.next=n2;
n2.next=n3;
n3.next=n4;
//n4.next=n1;
System.out.println(new IsLoop().isLoop(n1));
}
public boolean isLoop(Node head){
if(fast==null)
return false;
Node fast=head;
Node slow=head;
while(fast.next!=null&&fast.next.next!=null){
fast=fast.next.next;//2步
slow=slow.next;//1步
if(fast==slow)
return true;
}
return false;
}
}