题解 | #链表中环的入口结点#
链表中环的入口结点
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* fast = pHead, *slow = pHead; //由于存在链表没有换的情况,所以需要在有环判断中的if语句中进行操作。 while (fast && fast->next) { fast = fast->next->next; slow = slow->next; if (fast == slow) { ListNode* start = pHead; ListNode* meetingNode = fast; while (start != meetingNode) { start = start->next; meetingNode = meetingNode->next; } return start; } } return nullptr;//无环就是,fast为空的情况并且fast和slow不会相遇。 } };