Хотя общедоступный API-интерфейс LinkedList не является циклическим, внутренне он фактически является. Обращаясь к справочному источнику , вы можете увидеть, как он реализован:
// 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;
}