我知道我们可以使用两个指针并使用循环检测算法但是在上周的一次采访中,我被要求使用O(N) space Complexity
来做同样的事情。怎么办?
答案 0 :(得分:1)
有关详细实施,请阅读此文章(How to determine if a linked list has a cycle using only two memory locations)。
基本上你维护两个指针,这两个指针最初都指向链表的头部。在每个枚举中,将第一个指针前进一个节点,将另一个指针前进两个。如果这两个指针在某个时刻再次到达同一个节点,则会检测到一个循环。
我从您的描述中收集到您确实知道此算法。如果不考虑链表本身占用的空间,则该空间在O(1)
空间中工作。即使考虑到这么多空间,它仍然是O(n)
。 (如果空间复杂性是唯一的问题,那么显然存在更差的算法。)