Kre*_*dns 23 c# linked-list addressbook
在C#中创建循环链表的最佳方法是什么?我应该从LinkedList <T>集合中派生出来吗?我打算使用这个链接列表创建一个简单的地址簿来存储我的联系人(这将是一本糟糕的地址簿,但我不在乎因为我将是唯一一个使用它的人).我主要只想创建关键链表,以便我可以在其他项目中再次使用它.
如果您认为链接列表不是正确的方法,请告诉我哪种方式会更好.
Clu*_*ess 78
由于大多数这些答案实际上并未涉及问题的实质内容,仅仅是意图,或许这将有助于:
据我所知,链接列表和循环链接列表之间的唯一区别是迭代器在到达列表的结尾或开头时的行为.支持循环链表的行为的一种非常简单的方法是为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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以调用myNode.NextOrFirst()而不是myNode.Next,你将拥有循环链表的所有行为.您仍然可以执行常量时间删除,并在列表中的所有节点之前和之后插入等.如果我遗失了循环链表中的其他一些关键位,请告诉我.