2016-06-30 5 views
0

リストの先頭に「単純リンクリストの最後に要素を挿入する」というこの実装の問題点は何ですか? tmpまでリンクリストの最後に要素を挿入しますか?

void insert (int x, cel *ini) { 
    cel *tmp = ini;cel *left; 
    while (tmp != NULL) 
    { 
     left = temp; 
     tmp = tmp->prox; 
    } 
    cel *new =(cel*) malloc(sizeof(cel)); 
    new->value = x; 
    left->prox = new; 
    new->prox = NULL; 
} 

あなたがチェックしているがnullの場合、その後、あなたはtmp->prox=newを追加します。

void insert (int x, cel *ini) { 
    cel *tmp = ini; 
    while (tmp != NULL) 
     tmp = tmp->prox; 
    cel *new = malloc(sizeof(cel)); 
    new->value = x; 
    tmp->prox = new; 
    new->prox = NULL; 
} 
+1

に達しています。 –

+4

whileループは、tmpがnullになるまで繰り返し、ヌルポインタを間接参照しようとします。 tmp-> proxがnullになるまでループする必要があります。 –

+0

'malloc()'が成功したかどうかはチェックしません。それは問題です。どのようにして最初の要素をリストに追加しますか? –

答えて

2

これは動作するはずです。しかし、問題は現在のtempがNULLであることです。以前のtempのノードから新しいノードをポイントする必要があります。

0

だけに、whileループで条件を置き換える:あなたはNULLを指し、現在のリンクリストの最後のノードに到達するために持っているとしてそれはうまく動作します

while(tmp->prox!=NULL) 

ただし、次の条件を追加して、iniがNULLかどうかを確認する必要があります。そのためには、より前にを追加してください。

if(ini==NULL) 
{ 
cel *new = malloc(sizeof(cel)); 
new->value = x; 
new->prox = NULL; 
ini=new; 
} 

何あなたのプログラムがやっていることは、残りのコードを入力してくださいと何を抱えている問題があるNULL(あなたのプログラムのtmpがNULLである)

+1

if * iniがnullの場合はどうなりますか? – denis

+0

まあ、はいそれのための別の条件を追加する必要があります。私は答えに必要な変更を加えました。 –

関連する問題