判断是否成环,我们可以想象在环形操场中,一个人跑的块一个人跑的慢,它俩早晚会相遇,成环链表也是这个道理,我们定义两个游标分别为quick和slow,让游标quick一次走两步,让slow一次走一步,等slow和quick相等时,即它俩相遇时判断出是成环链表。如果quick走到下一个是地址空或它本身是空时,即不是成环链表。
代码如下:
节点Listnode类代码:
public class Listnode {
//定义链表节点的值
public int value;
//定义链表节点的下一个指针域
public Listnode next;
public Listnode(int n) {
this.value=n;
}
}
链表Linklist代码:
public class Linklist1 {
Listnode head=null;
//判断是否成环的方法
public boolean ifRing() {
//定义快游标
Listnode quick=head;
//定义慢游标
Listnode slow=head;
//快游标本身或下一个地址是否为null,因为它一次走两步。如果为空即不成环
while (quick!=null&&quick.next!=null) {
quick=quick.next.next;
slow=slow.next;
//判断如果slow游标和quick游标相遇即为环形链表
if(slow==quick) {
return true;
}
}
return false;
}
}