方法一快慢节点的方式,如果快节点与慢节点相遇证明有环
public int hasLoop(Node node) {
int hasLoop = 0;
Node node1 = node;
Node node2 = node;
while(node2 != null && node2.next != null) {
node1 = node1.next;
node2 = node2.next.next;
if(node1.equals(node2)) {
hasLoop = 1;
break;
}
}
return hasLoop;
}
方法二两个节点node1和node2,node2每次都从头开始走,看node1和node2走的步数是否一致,如果不一致存在环
public int hasLoop2(Node node) {
int hasLoop = 0;
int pos1 = 0;
Node node1 = node;
while(node1 != null) {
Node node2 = node;
int pos2 = 0;
while(node2 != null) {
if(node2.equals(node1)) {
if(pos1 != pos2) {
hasLoop = 1;
return hasLoop;
}else {
break;
}
}
pos2++;
node2 = node2.next;
}
pos1++;
node1 = node1.next;
}
return hasLoop;
}