2016-12-08 1 views
0

Wenn ich den ersten Wert der verknüpften Liste eingeben, schreibt Konsole den gleichen Wert zweimal. Zum Beispiel, wenn ich a eintippe, schreibt es aa und dann geht es normal.LinkedList liest Root-Wert zweimal

if (r == NULL) { // If our list is empty... 
    r = (node *) malloc(sizeof(node)); 
    r->x = i; 
    r->next = NULL; 
    r->prev = NULL; 
    iter = r; 
    last = r; 
    printf("%c", i); 
} 

if (iter == last) { 
    node* temp = (node *) malloc(sizeof(node)); 
    temp-> x = i; 
    temp->prev = last; 
    last->next = temp; 
    temp->next = NULL; 
    last = temp; 
    iter = last; 
    printf("%c", i); 
} 

Wie kann ich es beheben? Ich habe getch() verwendet, um Zeichen zu erhalten.

+1

Könnten Sie mehr von Ihrer Schleife buchen? – Stefan

+1

'if (iter == last)' ==> 'else if (iter == last)' –

Antwort

3

Ihnen fehlt eine Menge nützlicher Code aus Ihrer Liste, aber grundsätzlich wird beim Erstellen des Wurzelknotens immer zweimal gedruckt, da beide if Blöcke ausgeführt werden. Wenn Sie nicht möchten, dass beide ausgeführt werden, versuchen Sie es mit else if für den zweiten Block.

0

Fügen Sie vor Ihrer zweiten if-Klausel eine else hinzu. Es ist durchaus möglich, dass r null ist, dann nach sofort, die Bedingung für die zweite if-Klausel

if(iter==last) 

legt fest, wo im Stand, wenn Klausel Sie die folgende

iter = r; 
last = r; 

do Daher iter ist gleich zu dauern und die zweite if-Klausel wird ausgeführt.

Alternativ könnten Sie wie folgt vorgehen:

  1. eine break am Ende jeder if Klausel hinzufügen
  2. Speichern vor, was Sie in eine lokale Variable drucken möchten, dann ist es an einem Ort gedruckt werden (die DRY principle), und IMHO, die am besten für diese Situation geeignet