Entfernen von einer LinkedList

7

Aus der vorherigen Frage fragte ich, RemoveAll sei der sauberste Weg Entferne von List<> basierend auf einer Bedingung. Neugierig zu wissen, was der beste Weg ist, um aus einem LinkedList zu entfernen, da es dort keine RemoveAll -Funktion gibt.

%Vor%

BEARBEITEN: DS ist vom Typ LinkedList<ItemClass>

    
devnull 19.11.2011, 16:01
quelle

2 Antworten

23

Sie können Knoten zwar nicht aus einer LinkedList & lt; T & gt; entfernen, während Sie sie mit iterieren foreach , können Sie die LinkedList & lt; T & gt; manuell iterieren, indem Sie dem Nächste Eigenschaft von jedem LinkedListNode<T> . Denken Sie nur an den nächsten Knoten des Knotens, bevor Sie ihn entfernen:

%Vor%

Erweiterungsmethode:

%Vor%

Verwendung:

%Vor%

Siehe auch: Erweiterungsmethoden (C # -Programmierhandbuch)

    
dtb 19.11.2011, 16:11
quelle
0

Die einzige Möglichkeit, ein Objekt aus System.Collections.Generic.LinkedList<T> zu entfernen, ist die Verwendung einer der Methoden Remove() . Diese Operation ist jedoch schneller als das Entfernen eines Objektformulars List<T> ( O(1) anstelle von O(n) ), da die Operation lokal ausgeführt werden kann. Die Objekte hinter dem entfernten Objekt müssen nicht verschoben werden, nur die beiden Knoten vor und nach dem entfernten Objekt müssen miteinander verknüpft werden. %Code%. Dies geschieht intern, da die Eigenschaften removed.Previous.Next = removed.Next; removed.Next.Previous = removed.Previous; und Previous schreibgeschützt sind.

    
Olivier Jacot-Descombes 19.11.2011 16:15
quelle

Tags und Links