题解 | #链表中环的入口结点#
链表中环的入口结点
https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4
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) {
ListNode slow = loop(pHead);
if (slow == null) {
return null;
}
ListNode fast = pHead;
while(fast != slow){
fast = fast.next;
slow = slow.next;
}
return slow;
}
public ListNode loop(ListNode pHead) {
if (pHead == null) {
return null;
}
ListNode l1 = pHead;
ListNode l2 = pHead;
while (l2 != null && l2.next != null) {
l1 = l1.next;
l2 = l2.next.next;
if (l1 == l2) {
System.out.println(l1.val);
System.out.println(l2.val);
return l1;
}
}
return null;
}
}
1.第一步用快慢指针判断是否有相交点,如果是,说明是环
2.根据数学等式,相交点到坏起始点和从链表头节点到环起点走的路程一样
美的集团公司福利 798人发布
