快慢指针
慢指针移动一步
快指针移动两步
如果有环:快慢指针会相遇
如果没有环:快指针会指向NULL
循环条件:(快指针指向NULL,或者快指针的下个指向NULL.....因为有quickPtr->next,,所以后后面的判断,同时如果quickPtr->next为空,说明quickPtr一定可以指向NULL的)
while(quickPtr!=NULL && quickPtr->next!=NULL)
/**
* 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) {
//快慢指针的方式
//1.快指针指向head
ListNode * quickPtr = head;
//2.慢指针指向head
ListNode * slowlyPtr = head;
while(quickPtr!=NULL && quickPtr->next!=NULL)
{
slowlyPtr = slowlyPtr->next;
quickPtr = quickPtr->next->next;
if (slowlyPtr == quickPtr)
{
return true;
}
}
return false;
}
};