九章算法官网-原文网址
http://www.jiuzhang.com/problem/28/
题目
初阶:给一个单链表,判断这个单链表是否存在环,如1->2->3->4->2是一个存在环的链表。要求使用O(1)的额外空间。
进阶:求出环的入口。同样要求O(1)的额外空间。
解答
初阶:用两根指针,从链表头出发,一根慢指针每次走一步,另外一根快指针每次走两步。直到他们相遇(有环)或者快指针走到NULL(无环)。
进阶:相遇之后,将一根指针挪到链表头,两根指针每次都移动一步,直到再次相遇,相遇点即为环入口。
面试官角度
快慢指针的问题并不常见,用到这个思路的问题除了链表找环以外,还有链表找中点(要求一次扫描)。这个问题属于考烂的问题,也属于我知道就知道,不知道就拉倒的问题。大家记住这个问题的答案即可。具体的分析,读者可以自行在纸上演算。
时间: 2024-10-08 14:12:49