Basic Verknüpfte Liste in C

8

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

    
bclayman 16.05.2015, 18:36
quelle

4 Antworten

4
  

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 :

ist %Vor%     
FalconUA 16.05.2015, 18:46
quelle
7
%Vor%

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%     
Andrew Malta 16.05.2015 18:43
quelle
6

Sie sollten es &node3 übergeben. Zum Löschen ändern Sie bitte Ihren Code von current = current->next->next; bis current->next = current->next->next;

    
shruti1810 16.05.2015 18:42
quelle
4

Versuchen Sie, current = current->next->next; auf current->next=current->next->next zu ändern. Lass es mich wissen, wenn es nicht funktioniert.

    
aa1992 16.05.2015 18:41
quelle

Tags und Links