Laden...

LinkedList<T> - LinkedListNode<T> doppelt vorhanden

Erstellt von Sh00tingStar vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.016 Views
S
Sh00tingStar Themenstarter:in
29 Beiträge seit 2006
vor 17 Jahren
LinkedList<T> - LinkedListNode<T> doppelt vorhanden

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ß

M
1.439 Beiträge seit 2005
vor 17 Jahren

T1.Equals(T2)

S
Sh00tingStar Themenstarter:in
29 Beiträge seit 2006
vor 17 Jahren

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.....

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Sh00tingStar,

wenn du Node2 gelöscht hast, dann ist das anschließende Node2 = Node2.Next; sicher nicht so gesund.

herbivore

S
Sh00tingStar Themenstarter:in
29 Beiträge seit 2006
vor 17 Jahren

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.

484 Beiträge seit 2006
vor 17 Jahren

//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