我一直在寻找 c# 中双向链表的标准实现(以便我有一个可以向后迭代的链表),但找不到。我觉得如此简单的东西必须有我所缺少的实现。
如果它存在,它存在于哪个版本的 c#/.net?
一般而言,反向迭代似乎不打算在 c# 中完成。是我的思想过于停留在 c++/STL 模式还是 c# 中严重缺乏的东西?
我知道 LinkedList,但未能找到一种向后迭代它的方法,我假设它是单链接的。
如果 LinkedList 是双向链接的,如何(有效地)向后迭代它?
最佳答案
以下代码将有效地反向迭代 LinkedList:
LinkedList<string> list = new LinkedList<string>
(new[] {"cat", "dog", "frog", "antelope", "gazelle"});
LinkedListNode<string> item = list.Last;
do
{
Console.WriteLine(item.Value);
item = item.Previous;
}
while (item != null);
Console.ReadKey();
这里的关键是 LinkedList 仅包含对列表的第一个和最后一个 LinkedListNode 实例的引用。每个 LinkedListNode 实例都包含对列表中下一项和上一项的引用(或在列表的每一端为 null)以及一个 Value 属性。这意味着从第一个或最后一个 LinkedListNode 迭代很容易,但随机访问需要从列表中的第一个或最后一个迭代。
如果您需要沿途进行插入,请使用 LinkedList.AddBefore 或 AddAfter 插入一个新的 LinkedListNode。
关于c# - c#/.net x.x 是否有双向链表的实现(可以向后迭代)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2136766/