我先给出代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode Node;
bool hasCycle(struct ListNode *head) {
//快慢指针
Node *fast = head,*slow = head;
while(fast && fast->next)
{
slow = slow->next;
fast = fast->next->next;
if(slow == fast)
{
return true;
}
}//这里slow 每次走一步,fast每次走两步,走完判断是否相等,
//若有环fast 和 slow 最终一定会相遇。
//需要注意的是:这里fast只能每次走两步。因为这样的话fast和slow在环当中每走一步距离减小1,每次都减1,最终一定会相遇。
return false;
}
上面的代码当中我们让slow每次走一步,而fast每次走两步,然后再判断它俩是否相等。但其实我们应该思考为什么slow走一步fast要走两步,可不可以走三步四步甚至更多步呢。那下面我就给出我的理解