Ich schreibe ein Basic-Linked-List-Programm in C und habe ein bisschen Probleme mit dem Löschen. Folgendes habe ich:
%Vor%Frage 1: Also habe ich versucht zu schreiben:
%Vor%aber xCode wollte, dass ich "& amp;" vor "node3". Ist es allgemein wahr, dass ich, wenn ich eine Funktion definiere, um einen Zeiger zu nehmen, die Speicheradresse übergeben muss?
Frage 2:
Mit meiner Druckfunktion können die 3 Knotenwerte ausgedruckt werden. Nach dem Aufruf von delete und dem Versuch, node3 zu löschen, druckt es immer noch die 3 Knoten aus. Ich bin mir nicht sicher, wo ich falsch gelaufen bin. Ich finde den Knoten, der demjenigen vorangeht, den ich löschen möchte, und setze seinen nächsten Zeiger auf den Knoten nach dem Knoten nach (informally: node.next = node.next.next).
Irgendwelche Ideen?
Danke für die Hilfe, bclayman
Stimmt es generell, dass ich, wenn ich eine Funktion für die Übernahme eines Zeigers definiere, die Speicheradresse übergeben muss?
Ja, xCode hat Recht. node3
ist ein struct node
, aber Ihre Funktion delete
übernimmt struct node *
als zweiten Parameter, daher müssen Sie den Zeiger an node3
übergeben, nicht an die Variable selbst.
Nach dem Aufruf von delete und dem Versuch, node3 zu löschen, werden immer noch die 3 Knoten ausgedruckt.
Es, weil Sie den Wert von next
nicht ändern. Um sicher zu gehen, vergessen Sie nicht zu überprüfen, ob der Zeiger NULL
:
Ja, wenn Sie die Funktion für einen Zeiger deklarieren, müssen Sie ihm einen Zeiger übergeben.
Auch wenn Sie einen Wert aus einer verknüpften Liste löschen, müssen Sie
ändern %Vor% Sie sollten es &node3
übergeben. Zum Löschen ändern Sie bitte Ihren Code von
current = current->next->next;
bis current->next = current->next->next;
Tags und Links c linked-list