当前位置:  开发笔记 > 编程语言 > 正文

在C#中创建循环链表?

如何解决《在C#中创建循环链表?》经验,为你挑选了2个好方法。

在C#中创建循环链表的最佳方法是什么?我应该从LinkedList 集合中派生出来吗?我打算使用这个链接列表创建一个简单的地址簿来存储我的联系人(这将是一本糟糕的地址簿,但我不在乎因为我将是唯一一个使用它的人).我主要只想创建关键链表,以便我可以在其他项目中再次使用它.

如果您认为链接列表不是正确的方法,请告诉我哪种方式会更好.



1> Clueless..:

由于大多数这些答案实际上并未涉及问题的实质内容,仅仅是意图,或许这将有助于:

据我所知,链接列表和循环链接列表之间的唯一区别是迭代器在到达列表的结尾或开头时的行为.支持循环链表的行为的一种非常简单的方法是为LinkedListNode编写扩展方法,该方法返回列表中的下一个节点,如果不存在这样的节点,则返回第一个节点,类似地,用于检索前一个节点或最后一个节点.一个,如果没有这样的节点.以下代码应该完成,尽管我还没有测试过:

static class CircularLinkedList {
    public static LinkedListNode NextOrFirst(this LinkedListNode current)
    {
        return current.Next ?? current.List.First;
    }

    public static LinkedListNode PreviousOrLast(this LinkedListNode current)
    {
        return current.Previous ?? current.List.Last;
    }
}

现在你可以调用myNode.NextOrFirst()而不是myNode.Next,你将拥有循环链表的所有行为.您仍然可以执行常量时间删除,并在列表中的所有节点之前和之后插入等.如果我遗失了循环链表中的其他一些关键位,请告诉我.


那是完美的男人,谢谢!为了改善风格,可以使用'??' operator:return current.Next ?? current.List.First;
这里需要注意的一点是,如果节点本身未链接,则"current.List"可能为null.请参阅https://msdn.microsoft.com/en-us/library/h339c45b(v=vs.110).aspx

2> JaredPar..:

从BCL LinkedList类派生可能是个坏主意.该类被设计为非循环列表.试图让它循环只会导致你的问题.

你写自己的可能要好得多.

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有