我需要一个循环链表,所以我想知道是否LinkedList
是一个循环链表?
问问题
17471 次
5 回答
73
每当您想移动列表中的“下一个”部分时,以循环方式使用它的快速解决方案:
current = current.Next ?? current.List.First;
电流在哪里LinkedListNode<T>
。
于 2011-09-07T10:07:14.187 回答
19
不,它是一个双向链表,但不是循环链表。有关这方面的详细信息,请参阅MSDN。
不过,LinkedList<T> 为您自己的循环链表奠定了良好的基础。但是它确实有一个明确的 First 和 Last 属性,并且不会围绕这些进行枚举,而适当的循环链表会。
于 2009-06-22T16:49:13.897 回答
7
虽然 LinkedList 的公共 API 不是循环的,但实际上它在内部是循环的。查阅参考源码,可以看到它是如何实现的:
// This LinkedList is a doubly-Linked circular list.
internal LinkedListNode<T> head;
当然,为了隐藏它是循环的事实,遍历列表的属性和方法会进行检查以防止回绕到头部。
链表节点:
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.枚举器:
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;
}
于 2015-10-23T19:51:16.603 回答
4
不,这不对。见 MSDN
于 2009-06-22T16:46:20.900 回答