/**
* 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->next || !head) { //如果链表为空或者链表只有一个元素,则链表没环
return false;
}
ListNode* fast = head;//定义一个快指针
ListNode* slow = head;//定义一个慢指针
while (fast->next->next && fast->next) {
fast = fast->next->next; //每次快指针向后走两步
slow = slow->next; //每次慢指针向后走一步
if (fast == slow) { //如果快慢指针相遇了,说明链表有环,否则没环
return true;
}
}
return false;
}
};