Связан ли LinkedList в .NET с круговым списком?
Мне нужен круговой связанный список, поэтому мне интересно, является ли LinkedList
круговой связанный список?
Ответы
Ответ 1
Нет. Это двусвязный список, но не круговой связанный список. Подробнее см. MSDN.
LinkedList < Т > тем не менее, делает хорошую основу для вашего собственного кругового связанного списка. Но у него есть определенное свойство First и Last, и он не будет перечислять вокруг них, который будет иметь правильный круговой связанный список.
Ответ 2
Быстрое решение использовать его круговым способом, когда вы хотите переместить "следующий" фрагмент в списке:
current = current.Next ?? current.List.First;
Где ток LinkedListNode<T>
.
Ответ 3
Если вам нужна круговая структура данных, просмотрите коллекцию коллективных коллекций C5. У них есть любая коллекция, которая там может быть полезной, включая круговую очередь (что может вам помочь).
Ответ 4
Нет, его нет. См. MSDN
Ответ 5
Хотя публичный 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;
}