题目
题目链接:
https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4
思路
这一题 在 BM6 判断链表中是否有环 题目 的基础上增加一点点难度
只需要 BM6 判断链表中是否有环 这一题的基础上增加一点代码就可以,具体是:
当slow==fast时,fast需要重置为头结点,slow不变,然后while(true) ,这个时候快慢指针
每一次都只走一步,当时fast==slow,如果节点就是slow,当然fast也行
参考答案
import java.util.*;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead) {
if (pHead == null) return null;
ListNode slow = pHead; //慢指针
ListNode fast = pHead; //快指针
while (fast.next != null &&
fast.next.next != null) { //核心1:这个while条件要记住
slow = slow.next;
fast = fast.next.next;
//虽然确定有环了,但是入口节点可能不是这个,可能在这个节点的前面
if (slow ==
fast) {
fast = pHead; //核心2:找到环后,快指针重置为头结点
while (true) {
if (slow == fast) return slow; //入口节点就是他
slow = slow.next;
fast = fast.next;
}
}
}
return null;
}
}