我在学习一些关于链表和双链表的知识。C#双向链表 - 上一个和下一个不会连接
我试图建立一个双向链接列表与前一个和下一个节点,但当我debbug程序“指针”将不会连接到他们应该的地方彼此。在程序运行结束时,打印出的唯一重要值是我想要输入列表中的最后一个值,这是列表中唯一的值。
这是我的代码,我相信它应该没问题,因为'previous'和'next'节点不会互相连接。
Node<T> start;
Node<T> end;
public void AddFirst(T dataToAdd)
{
Node<T> tmp = new Node<T>(dataToAdd);
if (start == null)
{
start = tmp;
end = start;
}
tmp.next = start.previous;
end.next = tmp.previous;
start = tmp;
if (start.next == null)
{
end = start;
}
}
public void AddLast(T dataToAdd)
{
Node<T> tmp = new Node<T>(dataToAdd);
if (start == null)
{
AddFirst(dataToAdd);
}
tmp.next = start.previous;
end.next = tmp.previous;
end = tmp;
}
public T RemoveFirst()
{
if (start == null) return default(T);
T saveVal = start.data;
end.next = start.next.previous;
start = start.next;
if (start == null) end = null;
return saveVal;
}
public T RemoveLast()
{
if (start == null) return default(T);
T saveVal = end.data;
end.previous.next = start.previous;
end = end.previous;
if (start == null) end = null;
return saveVal;
}
public void PrintAll()
{
Node<T> tmp = start;
while (tmp != null)
{
Console.WriteLine(tmp.data);
tmp = tmp.next;
}
}
class Node<T>
{
public T data;
public Node<T> next;
public Node<T> previous;
//etc
public Node(T newData)
{
data = newData;
next = null;
previous = null;
}
}
}
[双向链表C#(https://gist.github.com/yetanotherchris/4960171) – CodingYoshi
我想你应该尝试写一些单元测试你的代码,并在其中添加代码的一部分一次。特别是,我怀疑为什么'end.next = tmp.previous;'在那里根本就没有,或者至少** **。 –
@CodingYoshi谢谢!我会按照你的例子,并检查我做错了什么! – Dolev