Em todo caso, lento pode andar meio círculo no máximo, e
os ponteiros rápidos e lentos dão um passo em lento, e dois passos em rápido são os mais adequados, porque assumindo que a diferença entre rápido e lento é n toda vez que eles se movem adiante, haverá uma diferença de n-1 passos, então eles definitivamente se encontrarão, se for uma lista encadeada circular.
o código
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
bool hasCycle(struct ListNode *head) {
struct ListNode *fast=head;
struct ListNode *slow=head;
while(fast && fast->next)
{
slow=slow->next;
fast=fast->next->next;
if(fast == slow)
{
return true;
}
}
return false;
}
Notas para uso pessoal, a qualidade do artigo não é boa! ! !