Frage

Ich brauche eine kreisförmige verknüpfte Liste, also frage ich mich, ob LinkedList Ist eine kreisförmige verlinkte Liste?

War es hilfreich?

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top