这道题的解题思路:使用快慢指针,因为如果链表有环的话,快指针一定能够与慢指针重合,就像操场的跑步一样。让快指针每次走两格,慢指针每次走一格。
值得注意的是while的循环条件。因为快指针每次走两格,那么快指针能够遍历的元素,慢指针也能遍历到,所以只需判断快指针是否为空,并且快指针的next不能为空。
public boolean hasCycle(ListNode head) {
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;
}