2016-12-08 3 views
0

Когда я набираю первое значение связанного списка, консоль записывает одно и то же значение дважды. Например, если я нахожу a, он пишет aa, а затем он идет нормально.LinkedList дважды считывает значение root

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

Как это исправить? Я использовал getch() для получения символов.

+1

Не могли бы вы разместить больше своей петли? – Stefan

+1

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

ответ

3

Вам не хватает кучи полезного кода из вашего списка, но в основном он будет всегда печатать дважды при создании корневого узла, потому что будут выполнены как блоки if. Если вы не хотите, чтобы оба они выполнялись, попробуйте использовать else if для второго блока.

0

Добавить еще до вашего второго предложения if. Вполне возможно, что г равна нулю, то сразу же после того, как условие для вашей второй, если статья предусматривает

if(iter==last) 

, где в предыдущем, если п выполнить следующие действия

iter = r; 
last = r; 

Поэтому ИТЭР равно для продолжения, а вторая, если предложение выполняется.

В качестве альтернативы вы можете сделать следующее:

  1. Добавить break в конце каждого if пункта
  2. Сохранить от того, что вы хотите напечатать на локальную переменную, а затем распечатать его в одном месте (DRY principle), и ИМХО, лучше всего подходит для этой ситуации
Смежные вопросы