题解 | #链表中环的入口结点#
链表中环的入口结点
https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* EntryNodeOfLoop(ListNode* pHead) {
ListNode* p1, *p2;
p1 = pHead;
p2 = pHead;
while (p2 != nullptr && p2->next != nullptr)
{
p1 = p1->next;
p2 = p2->next->next;
if (p1 == p2)
{
p2 = pHead;
if (p1 == p2) //环的入口可能在第一个结点处(示例:{},{1,2,3,4,5})
{
return p1;
}
else
{
while (p2 != nullptr && p2->next != nullptr)
{
p1 = p1->next;
p2 = p2->next;
if (p1 == p2)
{
return p1;
}
}
}
}
}
return nullptr;
}
};
