题解 | #链表中环的入口结点#
链表中环的入口结点
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) { //如果头节点或头节点下一个为空返回空 if(pHead==nullptr||pHead->next==nullptr){ return nullptr; } //创建快慢指针让它们在头结点的位置 ListNode* fast=pHead; ListNode* slow=pHead; //让快指针走两步慢指针走一步 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; } //把快指针放回头节点 fast=pHead; //当快慢指针又相遇时出循环 while(fast!=slow){ fast=fast->next; slow=slow->next; } //此时快慢指针即为入环节点 return slow; } };