用快慢指针,分别从两指针相遇位置和头指针位置出发两个相同速度的指针,相遇的位置就是环开始的位置。
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
ListNode *fast = head, *slow = head, *pos = nullptr;
while(fast != nullptr && fast->next != nullptr)
{
fast = fast->next->next;
slow = slow->next;
if(fast == slow)
{
pos = fast;
break;
}
}
if(pos == nullptr) return pos;
else
while(head != pos)
{
head = head->next;
pos = pos->next;
}
return pos;
}
};


京公网安备 11010502036488号