有没有人有C#代码来修复循环的链表?

时间:2009-12-18 00:33:23

标签: c# algorithm linked-list

how do you remove a cycle in a single linked list?

在我编写一些示例代码以执行此答案所描述的内容之前,是否有人已经有一个C#示例修复单个链接列表并指向自身?

我理解检测部分(乌龟/野兔)但修复部分对我来说有点模糊。

2 个答案:

答案 0 :(得分:3)

您链接的文章具有允许您计算具有两个引用的节点的算法,一个来自列表的开头,另一个来自应该是列表“结尾”的节点。如果您可以找到该节点,那么您肯定可以找到应该是列表末尾的节点。找到该节点。将其“next”引用设置为null。

我的建议:在白板上画出很多很多方框和箭头。通过在电路板上手动运行算法六次来了解算法的工作原理。一旦了解了它的可视化效果,编写代码就会更加简单明了。 (由于这个原因,我的白板通常充满了十几种不同颜色的盒子和箭头......)

答案 1 :(得分:1)

你找到了循环的“开始”。这是有多个节点连接到它的节点。

其中一个节点将来自列表的头部 - 您希望单独保留此节点。

另一个节点是您要更改的节点 - 通常会将其连接到null,表示列表的末尾。