Hallöchen 🙂
Ich hab eine LinkedList<string> und möchte rausfinden ob eine LinkedListNode<string> mehrfach vorhanden (im Endeffekt zählt das Value der Node) ist und dann alle Nodes die mehrmals da sind, bis auf eine löschen.
Das Problem ist, dass ich die Values der Nodes so gesehen nicht kenne.
Hab schon diverse Sachen versucht, aber nichts funktioniert 8o
Gruß
Darauf bin ich natürlich auch schon gekommen.... 😉
Das Problem dabei ist, wie soll ich die Nodes setzen?
Beispiel:
LinkedList<string> Liste = new LinkedList<string>();
Liste.AddLast("...");
//.........
//.........
LinkedListNode<string> Node1 = Liste.First;
LinkedListNode<string> Node2 = Liste.First;
for (int i = 1; i <= Liste.Count; i++)
{
//Vergleich der beiden Listen + Löschen der ListNodes die mehrfach vorhanden sind
if (Node1.Value.Equals(Node2.Value))
{
Liste.Remove(Node2);
}
Node1 = Node1.Next;
Node2 = Node2.Next;
}
Bei dem Beispiel sind die Nodes aber am Anfang die gleichen, was dazu führt, dass meine Liste hinterher leer ist.....
Hallo Sh00tingStar,
wenn du Node2 gelöscht hast, dann ist das anschließende Node2 = Node2.Next; sicher nicht so gesund.
herbivore
Das stimmt, aber das Beispiel war in aller Schnelle aus dem Kopf runtergeschrieben 😁
Wie dem auch sei, ich geh jetz den umständlichen Weg über ein Array bei dem ich die Indizes vergleiche... der einzig mögliche Weg, der mir einfiel.
//Nur so mal aus dem Bauch pseudo Code
// erster Aufruf mit stepForward true;
void FindeDoppelte( LinkedList<> liste, bool stepForward)
{
foreach(... in liste)
{
if(stepForward)
liste.MoveNext;
LinkedListNode<string> current = liste.FindLast(liste.Current.Value);
if(!current.Equals(liste.Current))
{
liste.Remove(current);
// Und hier dann ein nochmaliger Aufruf
FindeDoppelte(liste, false);
}
else
{
liste.MoveNext;
}
}
}
// Na ja irgendwie so in der Art
// is schon spät 8) - gute Nacht.
Jörg