前言
关于快慢指针找环入口的这个问题,之前巴特跟我聊到过,印象比较深,今晚看学长在做的面试题,里面就出现了这个小知识。
发现有些东西不经意间就会用到,于是便出现此文。以后要努力做到善于总结,乐于总结。
概念
快慢指针,所谓的快慢,就是指指针每次移动的步长,通常使快指针每次向前移动两步,慢指针每次向前移动一步。
判断链表环及找环入口
操作
从链表头节点开始,快慢指针同时开始移动,快指针每次移动2,慢指针每次移动1,若快指针最终与慢指针相遇,则表示链表有环,否则,则为无环。
有环情况下,快慢指针相遇时,慢指针位置不变,将快指针置回表头,步长改为每次移1,快慢指针同时开始移动,再次相遇处即为环的入口。
原理
判断是否有环就不解释了,下面主要解释,为什么可以那样找环入口。
⬇️<-<-<-⬆️
⬇️ ⬆️
♦️->->->⬇️->->->⬆️
A B C
只是个简单图,就不专门做图了,凑合表示下吧。
♦️也就是A的位置是