在C#中创建一个循环链表?
在C#中创建循环链表的最佳方式是什么? 我应该从LinkedList <T>集合中派生吗? 我打算使用这个链接列表来创建一个简单的地址簿来存储我的联系人(这将会是一个糟糕的地址簿,但我不在乎,因为我将是唯一使用它的人)。 我主要只是想创建关键链表,以便我可以在其他项目中再次使用它。
如果您不认为链接列表是正确的方式,请告诉我哪种方式会更好。
由于这些答案大部分并未真正解决问题的实质,仅仅是意图,或许这将有助于:
据我所知,链接列表和循环链接列表之间的唯一区别就是迭代器到达列表结尾或开始时的行为。 支持循环链表的行为的一种非常简单的方法是为LinkedListNode编写一个扩展方法,该方法返回列表中的下一个节点,或者如果没有这样的节点存在,则为第一个,并且类似地用于检索前一个节点或最后一个节点一个如果没有这样的节点存在。 下面的代码应该可以实现,尽管我没有测试过它:
static class CircularLinkedList {
public static LinkedListNode<T> NextOrFirst<T>(this LinkedListNode<T> current)
{
return current.Next ?? current.List.First;
}
public static LinkedListNode<T> PreviousOrLast<T>(this LinkedListNode<T> current)
{
return current.Previous ?? current.List.Last;
}
}
现在您可以调用myNode.NextOrFirst()而不是myNode.Next,并且您将拥有循环链表的所有行为。 您仍然可以执行常量时间删除,并在列表中的所有节点之前和之后插入等。 如果还有其他一些关键链表我错过了,请告诉我。
从BCL LinkedList类派生它可能是一个坏主意。 该课程设计为非圆形列表。 试图使其通告只会导致你的问题。
你自己写作可能会好得多。
我不认为循环链表是联系人列表的正确数据结构。 一个简单的List <>或Collection <>应该就足够了。
链接地址: http://www.djcxy.com/p/96941.html上一篇: Creating a circularly linked list in C#?
下一篇: copying property values from one instance to another, different classes