1,判断链表有环
可以使用快慢指针法,分别定义 fast 和 slow 指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。
2,寻找环的入口
在相遇节点处,定义一个指针index1,在头结点处定一个指针index2。让index1和index2同时移动,每次移动一个节点, 那么他们相遇的地方就是 环形入口的节点。
var detectCycle = function(head) {
//判断是否有环
//定义快慢指针
let s=k=head
//如果链表不为空,且k的next不为空
while(k && k.next){
s=s.next //慢指针走一步
k=k.next.next //快指针走两步
//如果相遇,则开始寻找入口
if(s==k){
let index1=head
let index2=s
while(index1!==index2){
index1=index1.next
index2=index2.next
}
return index1
}
}
return null
};