我知道我们可以使用两个指针和循环检测算法,但上周在一次采访中,我被要求使用O(N) space Complexity
来做同样的事情。如何进行?
有关详细实现,请阅读本文(如何仅使用两个内存位置来确定链表是否有循环)。
基本上,您维护两个指针,这两个指针最初都指向链表的头部。在每个枚举中,将第一个指针前移一个节点,将另一个指针前移两个节点。如果在某个时刻,这两个指针再次到达相同的节点,则检测到循环。
我从你的描述中了解到,你确实知道这个算法。如果不考虑链表本身占用的空间,则该链表在O(1)
空间中工作。即使考虑到这么多空间,它仍然是O(n)
。(如果空间复杂性是唯一的问题,那么显然存在更差的算法。)