c# - c#/.net x.x 是否有双向链表的实现(可以向后迭代)?

标签 c# .net collections linked-list iteration

我一直在寻找 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/

相关文章:

c# - NAudio Asio 同时录制和播放

c# - Azure 存储(经典)与 Azure 存储 (V2) 代码不适用于 V2 存储

c# - zlib from C++ to C#(How to convert byte[] to stream and stream to byte[])

c# - 在 Windows Server 2008 R2 上重置密码

java - 我可以在迭代过程中使用keySet修改HashMap吗?

c# - 我的 Web API C#.net 服务器无法反序列化 JSON 对象

c# - NHibernate 的 T4 模板? - 不流利的 NHibernate

c# - ASP.NET Core Web Api 发送 Access-Control-Allow-Origin : null CORS header and chrome is erroring, 如何修复?

java - 是否有一个集合 addAll 实用方法可以确保集合的底层数据结构最多只调整一次大小?

java - 对对象集合进行排序