Entfernen Sie alle Knoten im Link-Liste
Ich habe eine verknüpfte Liste enthält 3 Knoten wie im Bild gezeigt:
Es ist ein Kopf-Zeiger und temp1 Zeiger, zeigen Sie auf der Vorderseite der Liste, und die Schwanzspitze Punkte am Ende der Liste.
Möchte ich entfernen Sie alle Knoten, und ändern Sie es zurück zu seiner ursprünglichen ersten form ( tail = NULL head = first_node , aber der erste Knoten keinen Wert in den Daten und im nächsten Feld).
Weil ich möchte damit beginnen, einige neue Werte. Entfernen Sie alle diese Daten, ist dieser code gehen, entfernen von Knoten in dieser Link-Liste und Links mit dem ersten Knoten ohne Werte im Daten-und im nächsten Feld?
Dieser code ist in C++:
while(temp1!=tail)
{
temp1 = temp1->next;
if(temp1->next == tail)
{
tail=temp1;
temp1 = temp1->next;
free(temp1);
}
}
Aber dann, bedeutet dies, dass nur der Letzte Knoten gelöscht wird? gibt es eine Möglichkeit, löschen Sie alle Knoten außer dem ersten?
- Sollten Sie mithilfe der STL <Liste> es sei denn, Sie haben einen guten Grund zum Selbstdrehen. <Liste> unterstützt die Reinigung aller Elemente oder einen Bereich. Siehe cplusplus.com/reference/stl/list
- es ist C, nicht C++.
- Der Beispiel-code, den er gepostet wird, ist eigentlich gültig
C
undC++
und die Frage wird markiertC++
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Löschen Sie alle Knoten außer dem ersten Knoten, können Sie versuchen, folgenden code.
Dies löscht alle Knoten mit Ausnahme der ersten. Aber die Daten, die mit dem ersten Knoten wird so bleiben wie es ist.
Haftungsausschluss: ich nehme an, es ist nur für Lernzwecke und in real-world-Szenario, die Sie verwenden würden
std::list<>
oder ähnliche Behälter.Für single-Link-Liste, können Sie einfach löschen Sie alle diese Last und lasse die stdlib verwalten der Zeiger:
Können Sie sicher verwenden
.reset()
Methode, um Operationen auf der Liste:Aus http://en.cppreference.com/w/cpp/memory/unique_ptr/reset.
... Und das ist ziemlich viel, was Sie tun würde, wenn löschen. Ich glaube, Sie können auch verwenden,
unique_ptr::swap()
, zu leicht zu manipulieren Ihre Knoten.Statt
free
, C++, verwendet löschen Funktion.Überprüfen Sie die link zu haben vertiefte Kenntnisse über alle Arten von Operationen(einschließlich rekursive oder iterative löschen) auf verketteten Listen.
malloc
dann er muss verwendenfree
. Jetzt wäre die Frage eher: warum sollte ermalloc
in C++ ?delete
. Es istunique_ptr
für Sie.Die Logik wäre richtig, wenn es so ist.
Nach der Anweisung
Fügen Sie die Bedingung
Da nach dem löschen des letzten Knotens gibt es keinen Punkt in der Neuzuweisung der Adresse des head-Zeiger auf temp1.