2016-10-14 2 views
-1

Ich habe Probleme beim Entfernen von Knoten aus einer einfach verknüpften Liste. Beim Versuch, keinen ersten Knoten zu entfernen. Es scheint für den Rest der Liste Bezug zu verlieren. Kann jemand helfen? Dies ist die Funktion in Frage, es nimmt den Kopf der Liste und die Platte des Knotens entfernt werden.Problem beim Entfernen von Knoten aus der Liste

+0

Der erste Knoten in einer Liste *** ist *** die * Listenadresse *. Wenn Sie den ersten Knoten ändern, müssen Sie auch die als Listenadresse gespeicherte Adresse ändern. Daher haben Sie zwei Möglichkeiten: 1) übergeben Sie die * Adresse von * dem ersten Knoten in der Liste, damit dieser die neue erste Knotenadresse in der Funktion zugewiesen werden kann, oder 2) geben Sie die neue Listenadresse von der Funktion als Adresse zurück die neue Listenadresse im Aufrufer. –

Antwort

1

Wenn Sie das erste Element aus der Liste entfernen, sind alle Zeiger, die Sie auflisten müssen, jetzt ungültig. Wenn Sie list = current -> next; setzen, ist dieser Wert der Liste lokal für Ihre Funktion, er geht nie wieder aus Ihrer Funktion heraus, um den Zeiger zu aktualisieren, den Sie an die Funktion für den Anfang Ihrer Liste übergeben.

Um zu tun, was Sie wollen, benötigen Sie einen Zeiger auf einen Zeiger.

Car * removeCarFromList(Car ** list,char plate[]) dann ändern Strom zu: Car * current = *list; dann list = current->next zu *list = current->next; Dann

ändern, wenn Ihre Funktion ändern removeCarFromlist(myPointer,.... zu removeCarFromlist(&myPointer, ....

Diese MyPointer zum nächsten Element in der Liste Punkt ändert aufrufen, wenn der erste Punkt ist entfernt.

+0

Danke! Außerdem versuche ich meine Liste auf der Basis von Autos zu sortieren, wobei die Liste vom niedrigsten zum höchsten Wert geht. Kannst du helfen? –

0

Sobald Sie return aus einer Funktion, gibt es keine Rückkehr zurück auf die nächste Anweisung an die gleiche Funktion, so Verwendung von break nach return ist unsinnig. Zuerst, loswerden break Anweisung nach return.

Funktion Handhabung verkettete Liste Knoten Entfernung muss das Löschen von head Knoten behandelt separat, darauf achten, dass die neuen head zum nächsten Knoten aktualisiert wird.

Node *tmp = *head; 
*head = tmp->next; 
free(tmp); 
+0

Meine schlechte..fixed.thanks –

Verwandte Themen