题解 | #链表中环的入口结点#
链表中环的入口结点
http://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4
class Solution {
public:
ListNode* EntryNodeOfLoop(ListNode* pHead) {
ListNode *slow = pHead, *fast = pHead;
// 快慢指针,找到快慢指针第一次相遇的点
while (fast && fast->next) {
slow = slow->next;
fast = fast->next->next;
if (slow == fast) break;
}
// 若遇到空节点,则可以确定为无环
if (!fast || !fast->next) return nullptr;
// 一个针指从头结点开始,另一个从相遇点开始,都以每次一个结点的速度跑,再次相遇的时候就是入口
slow = pHead;
while (slow != fast) {
slow = slow->next;
fast = fast->next;
}
return slow;
}
};
查看18道真题和解析