链表中的循环何时有用?

时间:2012-08-10 13:31:57

标签: algorithm

确定单链表是否有循环是一个常见的面试问题。但是为什么链表存在循环?具有循环的链表何时有用?

5 个答案:

答案 0 :(得分:4)

如果要从随机迭代器开始迭代整个列表或插入任何位置,

Circularly linked lists会很有用。它们简化了这些操作的算法,因为您不必考虑列表的开头或结尾。

答案 1 :(得分:1)

然后,您将哪个元素作为参数传递给函数并不重要。使用sentinel模式时,您将遍历每个元素。

答案 2 :(得分:0)

Apache使用循环链接列表来存储其所有过滤器。

出于某种原因,他们给了它一个花哨的营销名称​​("Bucket Brigades"并称之为“一项重大创新” - 大声笑。

答案 3 :(得分:0)

要使用循环链接列表,您可以考虑本质上是循环的结构。例如以FIFO顺序使用和释放的缓冲池,或者应该以循环顺序分时的一组进程,或者以特定顺序保存多边形的节点坐标。

答案 4 :(得分:0)

此处给出的许多答案都考虑完全循环链接列表。

面试问题有点不同。我们要在链接中的某处检测循环(可以是部分

例如:(抱歉图形不佳)

1 -> 2 -> 3 -> 4 -> 5
        ^ v
        7 <----- 6

回答它是如何发生的:链接损坏。
a)人们试图通过UGC(用户生成的内容)进入。可能会出现不良数据 b)早期设计缺陷。

此循环检测也是我们在LinkedLists上进行测试的一部分,用于查找可疑错误。

你没有要求解决方案,但我会在此简要介绍一下:

  1. 继续将节点推送到List(java中的Arraylist)。找到重复的时间:检测到循环
  2. 龟&amp;野兔的方法。龟一次跳一个节点。兔子,一次两个。如果它是一个循环,它们会相遇
  3. 遍历时存储布尔标志*访问*。遇到* true *就是循环。