简介
环检测应该是一个非常常见的算法问题,怎么判断是否有环的问题呢?
一个很简单的做法就是用HashSet来保存要遍历的数据,如果出现了重复就知道这个链表是有环的。但是这个方法需要保存遍历过的所有的元素,所以其空间复杂度是o(n)。
有没有什么方法可以不用保存之前的元素也能够判断是否有环呢?
来看看弗洛伊德的兔子和乌龟算法吧。
弗洛伊德简介
有的同学会说了,弗洛伊德(Sigmund Freud)谁不知道,梦的解析的作者,大名鼎鼎的心理学专家,精神分析学派的创始人。
但是这里我们讲的弗洛伊德全名是Robert W.Floyd(罗伯特·弗洛伊德)而不是Sigmund Freud。
罗伯特·弗洛伊德是计算机科学家,图灵奖得主,前后断言法的创始人,堆排序算法和Floyd-Warshall算法的创始人之一。
它获得了1978年图灵奖,是一位“自学成才的计算机科学家”。
这个兔子和乌龟算法就是他发明的一种环检测算法。
构造一个环
在