利用快慢指针的思想
public boolean hasCycle(ListNode head) {
if(head==null||head.next==null)
return false;
ListNode fast = head;
ListNode slow = head;
while(fast!=null&&fast.next!=null){
fast = fast.next.next;
slow = slow.next;
if(fast ==slow)
return true;
}
return false;
}
对我个人而言,主要是注意 while循环中的条件判断。
如果有环,那么进行了一定次数的循环后,快慢指针是必定会重合的。
而如果无环,那么其实不需要判断 slow指针的条件,因为slow指针肯定比fast指针更晚到达链表尾部。
又因为 fast指针是 fast = fast.next.next; 所以需要判断
fast!=null&&fast.next!=null,以避免空指针异常的出现。