快慢指针法
分别定义 fast 和 slow指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
ListNode* fast=head;
ListNode* slow=head;
while(fast!=nullptr&&fast->next!=nullptr){
fast=fast->next->next;
slow=slow->next;
if(fast==slow) break;
}
if(fast==nullptr||fast->next==nullptr) return nullptr;
ListNode* temp=head;
while(temp!=slow){
temp=temp->next;
slow=slow->next;
}
return slow;
}
};