c# - 创建一个非常简单的单循环列表 C#

标签 c# data-structures linked-list circular-list

有人有一个使用 C# 非常简单地实现循环链​​表的示例吗?

我有这个链接列表,但我不知道如何使其成为圆形:

    public class LinkedList
    {
        public class Node
        {
            public Node next;
            public Object data;
        }

        private Node head;

        public void Add(Object data)
        {
            Node toAdd = new Node();
            toAdd.data = data;
            Node current = head;                
            current.next = toAdd;
        }

    }

谢谢。

最佳答案

为了使链表成为循环链表,尾节点应引用头节点。因此,只需在 Add() 方法末尾执行此操作即可:

toAdd.next = head;

请注意,您的 Add() 方法不会迭代链表中的所有节点,而只是迭代

Node current = head;

因此,如果您尝试添加多个节点,则只有头节点将被更新以指向每个新节点,替换它在每个 Add() 调用中拥有的任何引用,并且您的链表将始终最多只包含 2 个节点。

您可以像这样迭代每个节点(这替换了我上面提到的行):

Node current = head;

while (current.next != head)
{
    current = current.next;
}

现在,无论您向链表添加多少个节点,current 都将代表您的尾节点。然后你可以追加新的尾节点,使旧的指向新的,新的指向你的头节点。

另一件事:您当前的 Add() 实现要求您使用头节点初始化链表,否则如果您尝试添加,将会引发 NullReferenceException任何事物。您可以编写一个构造函数来轻松处理这个问题。

关于c# - 创建一个非常简单的单循环列表 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5518395/

相关文章:

java - 如果 LinkedList 为空,则返回 int 的方法不返回任何内容?

c# - 邮件错误 :The SMTP server requires a secure connection or the client was not authenticated. 服务器响应为 : 5. 5.1 需要身份验证

c# - .NET 列表框 : in ItemChecked event know if item was clicked

C++ vector remove_if 对

c - 结构中的 "warning: useless storage class specifier in empty declaration"

c - 为什么这个使用单指针的程序不起作用

c# - 在 C# 中将数组序列化为单个 XML 元素

c# - 如何向身份服务器本身颁发访问 token ?

c - 一个数字的最小底数,当以该底数表示时使其成为回文

python - 查找给定大小的每个连续子数组的最大值