给定一个链表,如果链表中有环,则返回环的入口,没环,则返回null
双链表解法
设置两个指针,从链表起始开始走,快指针一次走两步,慢指针一次走一步,如果有一个指针走到null,则链表没环,如果有环,则快慢指针一定会在环中相遇,记相遇点为P,
快指针:3,0,2,-4
慢指针:3,2,0,-4
则P点为-4这个点
将快指针重置到链表头结点,慢指针继续留在P点,两个指针同时开始走,每次都走一步,则相遇点即为环的入口
原理:leetcode-cn.com/problems/li…
代码:
function fun(head){
let fast = head,slow = head
while((fast!==slow||fast=head)){
if(!fast||!slow)return null
if(!fast.next) return null
fast = fast.next.next
slow = slow.next
}
fast = head
while(fast!==slow){
fast = fast.next
slow = slow.next
}
return fast
}