c# - 在 C# 中使用列表

标签 c# class list

我正在使用此页面上的代码 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/

相关文章:

arrays - 如何在R中创建列表矩阵?

xml - WCF XML 和列表序列化

c# - 如何提高从数据库中获取大量数据的 Select 查询的性能

c# - 动态设置泛型类型参数

c# - 从标准 io 编码捕获输出?

java - 将类(class)转换到自制类(class)

python - 在 Pandas 中将数据帧子集为多个数据帧

c# - 如何取消设置整数中的特定位

javascript - ES6 类中的访问器组合

javascript - 单击同级时从导航中删除类