2016-11-07 3 views
-4

Я пытаюсь добавить числа из списка в конце связанного списка, используя хвостовой указатель, но я не понимаю, почему мой хвост никогда не меняется.Я пытаюсь добавить числа из списка в конце связанного списка

struct node 
{ 
    int data; 
    struct node *next; 
}*head , *tail; 

typedef struct node NOD; 
//I addd the first node 
void addfirst(int num) 
{ 
    NOD *temp;//This is the new node 
    temp = (NOD*)malloc(sizeof(NOD)); 
    temp->data = num; 
    temp->next = NULL; 
    head = tail = temp; 
} 
//I add at the end of the list 
void add(int num) 
{ 
    NOD *temp; 
    temp = (NOD*)malloc(sizeof(NOD)); 
    temp->data = num; 
    temp->next = NULL; 
    tail->next = temp; 
    tail = temp; 
} 

int main() 
{ 
    int n , num, i; 
    freopen("intrare.txt" , "r" , stdin); 
    scanf("%d" , &n); 
    for(i = 0 ; i < n ; i++) 
    { 
     scanf("%d" , &num); 
     if(i==1) 
      addfirst(num); 
     else 
      add(num); 
    } 

    return 0; 
} 
+0

'if (i == 1)' -> 'if (i == 0)' – BLUEPIXY

+0

Это похоже на ответ – Radinator

ответ

0
temp->data = num; 
temp->next = NULL; 
head = tail = temp; 

изменить этот код

temp->data = num; 
temp->next = head; 
head = temp; 

Там нет необходимости менять хвост, когда вы добавляете в голове. Также, делая head = tail = temp;, вы теряете свой ранее сделанный список.

+0

Это то же самое, потому что функция «addfirst» используется только для добавления первого узла. Даже хуже, если я сделаю так, что хвост всегда будет равен NULL. – Vladimir

Смежные вопросы