leetcode 环状链表找到环的入口

163 阅读1分钟

给定一个链表,如果链表中有环,则返回环的入口,没环,则返回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
}