在C#中创建循环链表的最佳方法是什么?我应该从LinkedList
如果您认为链接列表不是正确的方法,请告诉我哪种方式会更好.
由于大多数这些答案实际上并未涉及问题的实质内容,仅仅是意图,或许这将有助于:
据我所知,链接列表和循环链接列表之间的唯一区别是迭代器在到达列表的结尾或开头时的行为.支持循环链表的行为的一种非常简单的方法是为LinkedListNode编写扩展方法,该方法返回列表中的下一个节点,如果不存在这样的节点,则返回第一个节点,类似地,用于检索前一个节点或最后一个节点.一个,如果没有这样的节点.以下代码应该完成,尽管我还没有测试过:
static class CircularLinkedList { public static LinkedListNodeNextOrFirst (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,你将拥有循环链表的所有行为.您仍然可以执行常量时间删除,并在列表中的所有节点之前和之后插入等.如果我遗失了循环链表中的其他一些关键位,请告诉我.
从BCL LinkedList类派生可能是个坏主意.该类被设计为非循环列表.试图让它循环只会导致你的问题.
你写自己的可能要好得多.