void delete_double (LN<T>*& l) {
if (l == nullptr)
return;
LN<T> *p = l;
while (p -> next != nullptr && p -> next -> next != nullptr)
{
if (p -> value == p -> next -> value) // the current value is equal to the next value in the linked list
{
if (p == l) // when the first two values are the same // not sure if it is correct
{
l = l -> next -> next;
}
else // Problem should be here
{
LN<T> *to_delete = p; // Also tried this (doesn't work)
p = p->next;
delete to_delete; // LN<T>* to_delete = p;
// LN<T>* to_delete2 = p -> next;
LN<T> *to_delete1 = p; // l = to_delete2 -> next;
p = p->next; // delete to_delete;
delete to_delete1; // delete to_delete2;
}
}
else
{
p = p-> next;
}
}
}
// Image below is my output
enter image description hereWie in einer verknüpften Liste
Hallo zwei Elemente in einer Zeile zu löschen, ich eine Funktion schreibe, die zwei Werte in einer Zeile in einer verknüpften Liste löschen, wenn die beiden Werte gleich sind. Mein Code scheint nicht mehr zu funktionieren, wenn die Eingabe etwas wie "1 -> 2 -> 3 -> 3 -> 4 -> nullptr" ist (die Ausgabe sollte 1 -> 2 -> 4 -> nullptr sein). Es wird beendet, ohne mir einen Fehler zu geben. Und ich ging Zeile für Zeile durch das Debugging, es kommt plötzlich und zeigt "Variablen sind nicht verfügbar".
Ich vermute, es ist das Problem, dass, wenn ich p löschen, l auf Müll zeigt, was das Problem verursacht. Also habe ich einen anderen Weg ausprobiert, um auf to_delete -> next zu zeigen. Aber es funktioniert immer noch nicht.
Ich habe so viele Stunden versucht, es zu beheben und das Debug wird nicht einmal helfen. Kann mir bitte jemand helfen? Ich danke dir sehr!
Oh ich sehe. Wenn Sie ein Element löschen, müssen Sie auch den nächsten Zeiger des Elements ändern, das diesem Element vorangeht. – perreal
Würden Sie alle Werte löschen, die zweimal vorkommen? oder ist es nur 1 Paar? –
@lykdog * und das Debug wird nicht einmal helfen * - Es scheint, als ob Sie zuerst auf Papier mit Boxen für die Daten und Zeilen für die Links arbeiten sollten, bevor Sie einen Code schreiben.Dann wäre das Debuggen nur eine Frage des Sehens, wo Ihr Code gegen das geht, was Sie auf dem Papier haben. – PaulMcKenzie