我正在使用此页面上的代码 Working with C# lists自 2 天以来,当我尝试更改代码以在上一个项目之后(而不是在上一个项目之前)将项目添加到列表时遇到问题。
//ListNode constructor params: name, code, nextNode
//Insert element after the first element
public void InsertelementAfterTheFirst(object name, object code)
{
if (IsEmpty())
FirstNode = LastNode = new ListNode(name, code, null);
else
{
FirstNode = new ListNode(name, code, FirstNode);
}
}
我知道我可以在 C# 中使用“List<>”集合,但我的目的是了解列表的工作原理。
感谢您的帮助。
最佳答案
这是伪代码...
if (firstNode is empty)
{
//new list...
firstNode = lastNode = new Node(name, code, null);
}
else
{
var node = new Node(name, code, firstNode.nextNode);
firstNode.nextNode = node;
}
唯一的问题是,这只适用于在第一个节点之后添加一个节点。更好的方法可能是在 InsertAfter 方法中指定要将新节点附加到哪个节点。或者,如果您正在使用类似迭代器的模式(您的链表类具有当前节点),您可以做类似的事情..只需获取当前节点并且上面 else 分支中的代码仍然可以工作(但不是 firstNode,它将是当前节点)。
类似于:
public ListNode InsertAfterCurrent(object name, object code)
{
if (currentNode == null)
{
//assume new list
currentNode = firstNode = lastNode = new ListNode(name, code, null);
}
else
{
currentNode.NextNode = new ListNode(name, code, currentNode.NextNode);
}
}
public ListNode InsertAfter(ListNode anchor, object name, object code)
{
if (anchor != null && NodeIsPartOfList(anchor))
{
anchor.NextNode = new ListNode(name, code, anchor.NextNode);
}
}
public bool NodeIsPartOfList(ListNode node)
{
var current = firstNode;
while (current != null)
{
if (current == node)
return true;
current = current.NextNode;
}
return false;
}
关于c# - 在 C# 中使用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5340981/