2017-10-24 15 views
1

ここには私のadd_to_list機能に問題があります。単一リンクリストの先頭にノードを挿入する

私は、この関数を使用して、リストポインタによって参照される単独リンクリストを募集するノードを追加します。

問題は次のとおりです。最初のノードが追加されます。それ以上追加すると、リストのトレースが失われます。

firstNULLを割り当て、その後の両方を意味 tempから firstの値は、これらの二行...

struct node * first = NULL; 
struct node * temp = first; 

を持ってmainの冒頭にそう

#include <stdio.h> 
#include <stdlib.h> 

struct node { 
    int value; 
    struct node* next; 
}; 

struct node *add_to_list(struct node *list , int n){ 
    struct node *new_node ; 
    new_node = malloc(sizeof(struct node)); //create new node 
    if(new_node == NULL){ 
     printf("Error ,malloc failed to allocate memory\n"); 
     exit(EXIT_FAILURE); 
    } 
    new_node->value = n; //initiate value field 
    new_node->next = list; 
    return new_node; 
} 

int main(){ 
    struct node * first = NULL; 
    struct node * temp = first; 
    first = add_to_list(first,10); 
    if(first != NULL) 
     printf("node added\n"); 
    else 
     printf("add failed\n"); 
    first = add_to_list(first,20); 
    if(first == NULL) 
     printf("node added\n"); 
    else 
     printf("add failed\n"); 
    first = add_to_list(first,30); 
    if(first == NULL) 
     printf("node added\n"); 
    else 
     printf("add failed\n"); 

    while(temp!=NULL){ 
     printf("%d-->",(temp->value)); 
     temp = temp ->next; 
    } 

    return 0; 
} 
+0

あなたのテスト。 – Mat

+1

'main()'の先頭には 'struct node * temp = first;'文があり、 'temp'に' NULL 'を割り当てます。 'while'ループではリストを出力しているので' while'ループの前に 'temp'に' first'を代入する必要があります。 –

答えて

2

...それらはNULLです。これは1回限りの割り当てです。tempfirstとして更新されません。

関数の最後に到達すると、このループがありますが、最初にNULLが割り当てられて以来、値はtempに更新されていません。

while(temp!=NULL){ 
    printf("%d-->",(temp->value)); 
    temp = temp ->next; 
} 

溶液がちょうどそうのようなループの前firsttempへの現在の値を割り当てることである: `(最初のものを除く)の反転されたヌルであるかどうかfirst`ため

temp = first; 
while(temp!=NULL){ 
    printf("%d-->",(temp->value)); 
    temp = temp ->next; 
} 
関連する問題