题解 | #链表中环的入口结点#
链表中环的入口结点
http://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4
/*class ListNode {
* val: number
* next: ListNode | null
* constructor(val?: number, next?: ListNode | null) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
* }
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead ListNode类
* @return ListNode类
*/
export function EntryNodeOfLoop(pHead: ListNode): ListNode {
// write code here
// method1
// const nodeSet = new Set();
// let p = pHead;
// while(p) {
// if(nodeSet.has(p)) {
// return p;
// } else {
// nodeSet.add(p);
// p = p.next;
// }
// }
// return null;
let fast = pHead, slow = pHead;
while(fast && fast.next) {
fast = fast.next.next;
slow = slow.next;
if(fast === slow) {
break;
}
}
if(!fast || !fast.next) {
return null;
}
fast = pHead;
while(fast !== slow) {
fast = fast.next;
slow = slow.next;
}
return fast;
}