142、环形链表II
文章目录
思路: 确定两个问题 有环和确定入口
- 有环:快指针比慢指针快一步,如果两个有相遇,就是有环
- 入口:相遇点和开头一起动,两者相遇的地方就是入口
重点:这个考察了数学知识,需要分析上面两个问题;题目中不是返回位置坐标,而是返回该位置的对象
方法一:快慢指针
public ListNode detectCycle(ListNode head) {
ListNode slow = head;
ListNode fast = head;
//确保下面的有意义
while (fast != null && fast.next != null) {
//快指针走两步 慢指针走一步
slow = slow.next;
fast = fast.next.next;
//移动快慢指针之后,就进行判断;防止最后一次因为while条件没有判断
//有环
if (slow == fast) {
//求相遇点,从头和相交处一起走
ListNode index1 = head;
ListNode index2 = fast;
while (index1 != index2) {
index1 = index1.next;
index2 = index2.next;
}
//相遇了
return index1;
}
}
return null;
}