2016-12-08 2 views
0

Lorsque je tape la première valeur de la liste chaînée, la console écrit deux fois la même valeur. Par exemple, si je tape a, il écrit aa et ensuite il va normalement.LinkedList lit deux fois la valeur de la racine

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); 
} 

Comment puis-je résoudre ce problème? J'ai utilisé getch() pour obtenir des caractères.

+1

Pourriez-vous poster plus de votre boucle? – Stefan

+1

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

Répondre

3

Il vous manque un tas de code utile dans votre liste, mais fondamentalement, il sera toujours imprimé deux fois lors de la création du noeud racine car les deux blocs if seront exécutés. Si vous ne voulez pas les exécuter tous les deux, essayez d'utiliser else if pour le second bloc.

0

Ajoutez un else avant votre deuxième clause if. Il est tout à fait possible que r est nul, puis tout de suite après, la condition de votre deuxième si la clause stipule

if(iter==last) 

où dans le préalable si l'article vous procédez comme suit

iter = r; 
last = r; 

Par conséquent iter est égal pour durer et la seconde si la clause est exécutée.

Alternativement, vous pouvez effectuer les opérations suivantes:

  1. Ajouter un break à la fin de chaque if clause
  2. Épargnes de ce que vous voulez imprimer à une variable locale, puis l'imprimer en un seul endroit (le DRY principle), et à mon humble avis, le mieux adapté à cette situation