给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null
。
思路:判断环形链表已经写过了【LeetCode】【Java】【链表】141. 环形链表【简单】
反正这题核心是 当快指针追上慢指针时,新建一个慢指针从head开始挪动,与此同时,在相遇点的慢指针也挪动,步长都为1,最终这俩相遇点就是环入口。(具体数学证明请百度)
public class Solution {
public ListNode detectCycle(ListNode head) {
ListNode slow = head;
ListNode fast = head;
ListNode slow2 = head;
int pos =0;
while( fast != null && fast.next != null){
slow = slow.next;
fast = fast.next.next;
if (fast == slow){//有环
while(slow2 != slow){//判断是否走到环入口相遇
slow = slow.next;
slow2 = slow2.next;
//pos += 1;这个判断索引没要求写
}
return slow2;
}
}
return null;
}
}