文章目录
- 1. 题目描述
- 2. 解题思路
- 3. 代码思路
1. 题目描述
2. 解题思路
快慢指针,原理就是快指针一次走两步,慢指针一次走一步,快指针会先进入到环中进行循环,慢指针后进行。以相对来看,快指针是比慢指针多走一步,只要进入到环中,那么快指针迟早会追上慢指针。如果没有环,就会走到nullptr。
3. 代码思路
/**
* 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 == nullptr) return false;
ListNode* fast = head, *slow = head;
while(fast && slow && fast->next)
{
fast = fast->next->next;
slow = slow->next;
if(fast == slow) return true;
}
return false;
}
};