/**
- 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) {//设置一个快指针,每次向前挪两个位置;设置一个慢指针,每次向前挪一个位置 //两指针同时向前移动,直到快指针为null,说明没有环;若移动过程中,快慢指针相遇了,则说明有环 if(!head) return false; ListNode * fast = head; ListNode * slow = head; while(1) { if(!fast->next) return false; //快指针挪两步,每挪一步前,需要先“试探”下一步是否为空,为空表明没有环 else fast = fast->next; if(!fast->next) return false; else fast = fast->next; slow = slow->next; //慢指针向前挪一步 if(fast->val == slow->val) return true; //相遇,有环 }
}
};