解决环链表问题
// 检测环,慢指针和快指针的初始位置都为 dummyHead
while (fast != null && fast.next != null) {
slow = slow.next;
fast = fast.next.next;
if (slow == fast) {
break;
}
}
// 找到环的入口点
ListNode temp = dummyHead;
while (temp != slow) {
temp = temp.next;
slow = slow.next;
}
在这个方法中,首先使用慢指针和快指针,慢指针每次前进一步,快指针每次前进两步,直到它们相遇,表明存在环。
然后,为了找到环的入口点,我们再次使用一个指针(这次是从头结点开始,而不是从相遇点开始),这个指针每次前进一步,同时慢指针也每次前进一步,当它们相遇时,就找到了环的入口点。
这个方法的关键在于理解它的原理,并且能够推导出正确的公式,以便正确地找到入口点。