C# LinkedList实现错误 我试图实现下面的链接列表,只是当我使用我的链表时,它好像在中间插入了一个空条目。有人可以看一下吗?问题可能出在addend方法中 LinkedList<T> public class LinkedList<T> : IEnumerable<T> { public Node<T> Head { get; set; } public int Count { get; set; } public LinkedList() { Head = new Node<T>(); } public void AddStart(T data) { if (Head == null) { Head = new Node<T> {Value = data}; } else { var newNode = new Node<T> {Value = data, Next = Head}; Head = newNode; } Count++; } public void AddEnd(T data) { var newNode = new Node<T> { Value = data, Next = null}; var current = Head; if (Head == null) { Head = newNode; } else { while (current.Next != null) { current = current.Next; } current.Next = newNode; } } public IEnumerator<T> GetEnumerator() { Node<T> current = Head; while (current != null) { yield return current.Value; current = current.Next; } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } }

C# LinkedList实现错误 我试图实现下面的链接列表,只是当我使用我的链表时,它好像在中间插入了一个空条目。有人可以看一下吗?问题可能出在addend方法中 LinkedList<T> public class LinkedList<T> : IEnumerable<T> { public Node<T> Head { get; set; } public int Count { get; set; } public LinkedList() { Head = new Node<T>(); } public void AddStart(T data) { if (Head == null) { Head = new Node<T> {Value = data}; } else { var newNode = new Node<T> {Value = data, Next = Head}; Head = newNode; } Count++; } public void AddEnd(T data) { var newNode = new Node<T> { Value = data, Next = null}; var current = Head; if (Head == null) { Head = newNode; } else { while (current.Next != null) { current = current.Next; } current.Next = newNode; } } public IEnumerator<T> GetEnumerator() { Node<T> current = Head; while (current != null) { yield return current.Value; current = current.Next; } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } },c#,data-structures,linked-list,C#,Data Structures,Linked List,用法: LinkedList<string> strings = new LinkedList<string>(); strings.AddStart("a"); strings.AddStart("b"); strings.AddStart("c"); strings.AddEnd("a"); strings.AddEnd("e"); strings.AddEnd("d"); LinkedL

用法:

 LinkedList<string>  strings = new LinkedList<string>();            
    strings.AddStart("a");
    strings.AddStart("b");
    strings.AddStart("c");
    strings.AddEnd("a");
    strings.AddEnd("e");
    strings.AddEnd("d");
 LinkedList<string>  strings = new LinkedList<string>();
strings.AddStart("a");
strings.AddStart("b");
strings.AddStart("c");
strings.AddEnd("a");
strings.AddEnd("e");
strings.AddEnd("d");
strings.AddStart("a");
strings.AddEnd("b");
strings.AddStart("a");
strings.AddStart("b");
strings.AddStart("c");
strings.AddEnd("a");
strings.AddEnd("e");
strings.AddEnd("d");

初始化LinkedList时,您正在创建一个空节点:

public LinkedList()
{
    Head = new Node<T>();
}
或者一起删除构造函数。在这两种方法中,都是使用值检查头节点,因此不需要在没有值的情况下对其进行初始化

if (Head == null)
{
    Head = new Node<T> {Value = data};
}

在您的情况下,测试将失败,您可能已将问题回溯到构造函数。

初始化LinkedList时,您正在创建一个空节点:

public LinkedList()
{
    Head = new Node<T>();
}
或者一起删除构造函数。在这两种方法中,都是使用值检查头节点,因此不需要在没有值的情况下对其进行初始化

if (Head == null)
{
    Head = new Node<T> {Value = data};
}

在您的情况下,测试将失败,您可以将问题回溯到您的构造函数。

这是快速而正确的。我不敢相信这是非常基本的,我感到很尴尬。谢谢你的解释!祝你愉快。我们都多次陷入这样的困境。没什么好尴尬的。那很快就好了。我不敢相信这是非常基本的,我感到很尴尬。谢谢你的解释!祝你愉快。我们都多次陷入这样的困境。没什么好尴尬的。
if (Head == null)
{
    Head = new Node<T> {Value = data};
}
[Fact]
public void AssertHeadIsNull()
{
    var list = new LinkedList<int>();
    Assert.Null(list.Head);
}