解法:
就像跑2000米一样,跑得快快的可能会套圈跑的慢的,所以采用快慢指针,如果他们相遇了则存在环,快指针遇到null则不存在环
如果令慢指针一圈时间为2t,快指针速度为t,则找公倍数,在时间为2t时必相遇
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
bool hasCycle(ListNode *head) {
ListNode *fast=head,*slow=head;
//注意先对跑的快的进行预判防止越界
while(fast!=NULL&&fast->next!=NULL&&fast->next->next!=NULL){
fast=fast->next->next,slow=slow->next;
//相遇,说明存在环
if(fast==slow)return true;
}
return false;
}
};