原理:我们先判断当前链表是否是环形链表,定位到快慢指针相遇的结点,这是创建一个temp指针指向第一个元素,用temp指针和慢指针继续遍历链表,temp指针和慢指针相遇的结点就是环形链表的入口
数学分析:
为什么在快慢指针相遇之后,用temp指针和慢指针去遍历链表时,相遇的结点就是环形链表的入口呢?
//找出循环链表的入口
public static Node getEntrance(Node first){
//判断链表是否有环
//定义两个快慢指针
Node fast=first;
Node slow=first;
Node temp=null;
//遍历链表,判断两指针是否相遇
while(slow!=null&&slow.next!=null){
fast=fast.next.next;
slow=slow.next;
//相遇,让新指针指向第一个结点,找到slow指针和temp指针相遇的结点,就是环的入口
if(fast.equals(slow)){
temp=first;
continue;
}
//是循环链表
if(temp