1.遍历每一个节点,然后加入一个set中,如果set中包含某一个节点,则有环
2.快慢指针
其中一个每次走一步,另一个每次走两步,如果最后相遇,则有环。
public static void main(String[] args) {
Node head = new Node(1);
Node node1 = new Node(2);
Node node2 = new Node(3);
Node node3 = new Node(4);
head.next = node1;
node1.next = node2;
node2.next = node3;
node3.next = node1;
System.out.println("haveRing(head) = " + haveRing(head));
}
public static boolean haveRing(Node head){
Node fast = head;
Node slow = head;
while(fast != null && fast.next != null && slow != null){
fast = fast.next.next;
slow = slow.next;
if(fast == slow){
return true;
}
}
return false;
}
static class Node {
int value;
Node next;
public Node(int value) {
this.value = value;
}
}