判断链表是否有环,运用到一个叫快慢指针的东西,如图所示,两个指针从头指针开始出发(图一),一块一慢顺着链表前行,如果链表无环,则快指针首先遍历完到达null(图二),如若存在环,则快指针会绕环达不到null的位置,并存在某一时刻,快慢指针指向相同位置(图三)
图一
图二
图三
//link为链表头指针
Node link1=link;
Node link2=link;
while (link1!=link2||link2!=null){
link1=link1.next;
link2=link2.next;
if(link2==null){
break;
}
link2=link2.next;
}
if(link2==null){
System.out.println("无环");
}else{
System.out.println("有环");
}