利用的思想是小学奥数常见的追及问题
思路:如果存在回路,当两个速度不同的指针在其中不断循环时,一定会出现追及问题
如何体现速度不同:一个指针一次只跳一个结点,另一个指针一次跳两个(或多个)结点。
如何体现追及:判断两个指针所指向的内容是否是同一块地址区间。
代码
/**
* 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) {
if(head==NULL)
return false;
ListNode * fast_p = head;
ListNode * slow_p = head;
while(fast_p!= NULL && fast_p->next!=NULL){
slow_p = slow_p->next;
fast_p = fast_p->next->next;
if(fast_p == slow_p)
return true;
}
return false;
}
};