2016-08-10 4 views
0

Ich versuche, Linkedlist in C++ zu lernen, ich habe ein Problem, da Linkedlist nur 2 Elemente hinzufügt.LinkedList fügt nur zwei Elemente in C++ hinzu

Code:

struct Node { 
int data1; 
Node* next; 
}; 

void firstElement(Node *&head, int d) 
{ 
Node* temp = new Node; 
temp->data1 = d; 
temp->next = NULL; 
head = temp; 
} 

void insert(Node *&node, int data) 
{ 
Node* temp = new Node; 
temp->data1 = data; 
temp->next = NULL; 


while(node) 
{ 
    if(node->next == NULL) 
    { 
     node->next = temp; 
     return; 
    } 
    node = node->next; 
} 

} 

void display(Node *&node) 
{ 
while(node != NULL) 
{ 
    cout << node->data1 << endl; 
    node = node->next; 
} 
} 

int main() 
{ 
Node* head; 

firstElement(head, 1); 
insert(head, 2); 
insert(head, 3); 
insert(head, 4); 
insert(head, 5); 
insert(head, 6); 
insert(head, 7); 
insert(head, 8); 
insert(head, 9); 
insert(head, 10); 

display(head); 

} 

In der Ausgabe, es gibt mir nur 9 and 10 schätzen das heißt nur die letzten zwei Elemente. Sieht so aus, als würde es nur die Werte ersetzen. Aber ich verstehe es nicht. Für meinen temp Knoten initialisiere ich ihn bereits zum nächsten, d. H. . Und in insert() Funktion verwende ich eine if condition, um nur den nächsten Knoten hinzuzufügen, wenn es NULL ist.

Irgendwelche Vorschläge?

+3

Was haben Sie beobachtet, wenn sie mit dem Debugger durch yout Code Zeile für Zeile treten? –

+1

Ich habe C++ seit Jahren nicht mehr benutzt, aber ist "* &" in diesem Fall wirklich korrekt? –

+1

@StefanAgartsson Es braucht nur einen Verweis auf einen Zeiger – Garf365

Antwort

3

Das Problem kommt von insert Funktion. Es dauert eine Node* & so, sobald Sie tun

node = node->next; 

in der Schleife, wird die Variable durch den Anrufer als Knotenparameterliste verwendet ändern. entfernen & und Ihr Problem gelöst ist:

void insert(Node* node, int data) 
+0

"Original-Liste" zu "Variable, die vom Aufrufer als der Knoten-Parameter verwendet wird" zu empfehlen, um die Übersichtlichkeit zu erhöhen. – user4581301

+0

Ja. es funktionierte. und wenn er '* &' hinzufügt, dann musste ich diesen parametrisierten Knoten an einen neuen Knoten übergeben und dann temp zu diesem neuen Knoten hinzufügen, z.B. 'Knoten * n = Knoten; while (n) ...... n-> next = temp; .... n = n-> nächste; ' Aber ich habe nicht verstanden, wie du gesagt hast, es wird die ursprüngliche Liste ändern. Wenn es das Original ersetzen sollte, sollte es mir dann nicht nur 10 anzeigen? Warum '9 und 10'? – nix

+0

Vielen Dank für Ihren Vorschlag, es wurde bearbeitet;) – Omar

Verwandte Themen