我需要一个循环链表,所以我想知道LinkedList
是否是循环链表?
答案 0 :(得分:57)
当您想要移动列表中的“下一个”部分时,以循环方式使用它的快速解决方案:
current = current.Next ?? current.List.First;
当前为LinkedListNode<T>
。
答案 1 :(得分:16)
没有。它是一个双向链表,但不是循环链表。请参阅MSDN for details on this。
链表&LT; T&GT;但是,为您自己的循环链表奠定了良好的基础。但它确实有一个明确的First和Last属性,并且不会枚举这些属性,这是一个合适的循环链表。
答案 2 :(得分:6)
如果您需要循环数据结构,请查看C5 generic collections library。他们有任何可以在其中使用的集合,包括circular queue(这可能会对你有所帮助)。
答案 3 :(得分:4)
不,不是。 See MSDN
答案 4 :(得分:4)
虽然LinkedList的公共API不是循环的,但实际上是内部的。咨询reference source,您可以看到它是如何实现的:
// This LinkedList is a doubly-Linked circular list.
internal LinkedListNode<T> head;
当然,要隐藏它是循环的这一事实,遍历列表的属性和方法会进行检查以防止回绕到头部。
一个LinkedListNode:
public LinkedListNode<T> Next {
get { return next == null || next == list.head? null: next;}
}
public LinkedListNode<T> Previous {
get { return prev == null || this == list.head? null: prev;}
}
LinkedList.Enumerator:
public bool MoveNext() {
if (version != list.version) {
throw new InvalidOperationException(SR.GetString(SR.InvalidOperation_EnumFailedVersion));
}
if (node == null) {
index = list.Count + 1;
return false;
}
++index;
current = node.item;
node = node.next;
if (node == list.head) {
node = null;
}
return true;
}