本地比较简单,是一个常见的题。常规解法就是快慢指针,如果两个指针最终相遇说明有环,如果最终到null则说明没有环。
但是要该如何证明有环的情况下快慢指针必然会相遇呢?因为快指针每次相对慢指针多走一步,如果存在环他们必然能够相遇。
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public boolean hasCycle(ListNode head) {
ListNode fast = head, slow = head;
while (fast != null && slow != null) {
slow = slow.next;
fast = fast.next;
if (fast == null) {
return false;
} else {
fast = fast.next;
}
if (fast == slow) {
return true;
}
}
return false;
}
}