Ist die LinkedList in .NET eine kreisförmige verknüpfte Liste?
-
06-07-2019 - |
Frage
Ich brauche eine kreisförmige verknüpfte Liste, also frage ich mich, ob LinkedList
Ist eine kreisförmige verlinkte Liste?
Lösung
Nein. Es ist eine doppelt verknüpfte Liste, aber keine kreisförmige verlinkte Liste. Sehen MSDN für Einzelheiten dazu.
LinkedListu003CT> bildet jedoch eine gute Grundlage für Ihre eigene kreisförmige Liste. Aber es gibt eine bestimmte erste und letzte Eigenschaft und wird nicht um diese aufgezählt, die eine ordnungsgemäße kreisförmige Liste wird.
Andere Tipps
Eine schnelle Lösung, um es kreisförmig zu verwenden, wann immer Sie das "nächste" Stück in der Liste bewegen möchten:
current = current.Next ?? current.List.First;
Wo Strom ist LinkedListNode<T>
.
Wenn Sie eine kreisförmige Datenstruktur benötigen, schauen Sie sich das an die C5 generische Sammlungsbibliothek. Sie haben eine Sammlung, die dort einfallsreich nützlich ist, einschließlich a Rundwarteschlange (was dir helfen könnte).
Nein, ist es nicht. Siehe MSDN
Während die öffentliche API der LinkedList nicht kreisförmig ist, ist sie intern tatsächlich. Beratung der Referenzquelle, Sie können sehen, wie es implementiert ist:
// This LinkedList is a doubly-Linked circular list.
internal LinkedListNode<T> head;
Um die Tatsache zu verbergen, dass es kreisförmige Eigenschaften und Methoden ist, die die Liste durchqueren, führen Überprüfungen durch, um zu verhindern, dass sie sich in den Kopf zurückziehen.
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;
}