【问题标题】:Does anyone have C# code to repair a linked list that cycles?有没有人有 C# 代码来修复循环的链表?
【发布时间】:2009-12-18 00:33:22
【问题描述】:

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

在我编写一些示例代码来执行此答案所描述的操作之前,是否有人已经有了修复指向自身的单链表的 C# 示例?

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

【问题讨论】:

  • 修复你的代码,而不是列表。
  • 同意……但这是一个面试问题。

标签: c# algorithm linked-list


【解决方案1】:

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

我的建议:在白板上画很多很多的方框和箭头。通过在板上手动运行六次来了解算法的工作原理。一旦你理解了它是如何在视觉上工作的,编写代码就会变得更加简单。 (由于这个原因,我的白板上通常塞满了大约十几种不同颜色的方框和箭头……)

【讨论】:

  • 是的......我只是想偷懒并使用我最喜欢的代码 - 别人的。这是我的周末项目。
  • 没有找到代码...我自己写的。有很多方法可以“减 1”,但我有一些代码可以始终如一地工作。去牛仔队!击败圣徒! (哦等等……他们有过吗!)
【解决方案2】:

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

其中一个节点将来自列表的头部 - 您想不理会这个节点。

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

【讨论】:

    猜你喜欢
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    相关资源
    最近更新 更多