单链表会出现中间和结尾相连的情况,这样节点的head.next永远不会出现null,这样容易出现死循环,所以判断一个链表是否有环非常重要。
最简单的方法是设置两个指针,一个快指针,一个慢指针。快指针走两步,慢指针走一步。如果在两个指针不为null的情况下,两个指针会走到同一个节点,这就可以证明环的存在。
代码如下:
1 public class HasCycle { 2 public static boolean hasCycle(Node head){ 3 boolean flag = false; 4 Node fast = head; 5 Node slow = head; 6 while(fast != null && slow != null){ 7 fast = fast.next.next; 8 slow = slow.next; 9 if(slow == fast){ 10 flag = true; 11 break;; 12 } 13 } 14 return flag; 15 16 }