C#中的链表实现

时间:2018-12-02 03:20:20

标签: c# linked-list

我正在用c#创建链接列表,我一直在使用一个网站来向https://www.codeproject.com/Articles/1104980/Linked-List-Implementation-in-Csharp学习

此站点提供了我尝试的代码,但我遇到了问题。我使用的代码是

<dependency>
     <groupId>info.cukes</groupId>
     <artifactId>cucumber-junit</artifactId>
     <version>1.2.5</version>
     <scope>test</scope>
 </dependency>

该代码是从网站复制的,因此应该没有错误。但是我的问题是,当我使用AddAtStart将项目添加到列表的开头,然后使用AddAtLast将项目添加到列表的末尾时,AddAtLast会删除我之前添加的所有节点,并且现在仅存储新的AddAtLast条目​​。我认为,这可能是由于潮流造成的。我认为当前以为是头节点而不是最后一个节点,因此当我在末尾添加时,它在开始时添加并删除所有节点。这可能是我遇到问题的原因。

如果我仅使用AddAtStart,那么一切正常,添加了所有节点,我可以有很多节点,但是仅当使用AddAtLast时,一切都会消失

编辑我忘记了我的代码与本网站的区别与我道歉。我将使用正在使用的代码进行编辑

public class Node
{
    public Node Next;
    public object Value;
}
public class LinkedList
{
    private Node head;
    private Node current;//This will have latest node
    public int Count;
}

public LinkedList()
{
    head = new Node();
    current = head;
}

public void AddAtLast(object data)
{
    Node newNode = new Node();
    newNode.Value = data;
    current.Next = newNode;
    current = newNode;
    Count++;
}

public void AddAtStart(object data)
{
    Node newNode = new Node() { Value = data};
    newNode.Next = head.Next;//new node will have reference of head's next reference
    head.Next = newNode;//and now head will refer to new node
    Count++;
}

2 个答案:

答案 0 :(得分:1)

引起此问题的原因是您的类LinkedList的结构需要修复。您必须将其构造函数和方法移入其声明,如下所示:

public class Node
{
    public Node Next;
    public object Value;
}

public class LinkedList
{
    private Node head;
    private Node current;//This will have latest node
    public int Count;

    public LinkedList()
    {
        head = new Node();
        current = head;
    }

    public void AddAtLast(object data)
    {
        Node newNode = new Node();
        newNode.Value = data;
        current.Next = newNode;
        current = newNode;
        Count++;
    }

    public void AddAtStart(object data)
    {
        Node newNode = new Node() { Value = data };
        newNode.Next = head.Next; //new node will have reference of head's next reference
        head.Next = newNode; //and now head will refer to new node
        Count++;
    }
}

答案 1 :(得分:0)

您的current节点在构造函数中设置为head,然后仅在AddAtLast()中进行了更新。
发生的情况是,当您添加节点时AddAtStart()的电流不变,并且始终指向head,因此,当您调用AddAtLast()时,它使head.Next指向{{1 },然后使当前节点成为新节点。您将丢失newNode过去指向的所有节点。

要添加到链接列表的末尾,您必须遍历该列表,直到到达head(即最后一个节点)所在的节点,然后在该节点处添加该节点。或者,创建字段node.next == null并将其更新为始终添加到列表末尾时始终指向最后一个节点。然后,您可以将新节点追加到Node Last

以下内容将更新当前内容,使其指向最后一个节点,然后在末尾添加一个节点。

Last