0

空かどうかにかかわらずノードを追加するコードを書きました。私のコードとロジックは正しいと思いますが、それでも答えを得ることができません。コンパイル中ですが、実行後は結果が表示されません。どうしてか言ってくれない

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

struct node 
{
    int data;
    struct node *nxt;
};

void append(struct node *,int);
void display(struct node*);

void append( struct node *q, int num )
{
    struct node *temp,*r;
    if(q == NULL)
    {
        temp = (struct node*)malloc(sizeof(struct node));
        temp -> data = num;
        temp -> nxt = NULL;
        q = temp;
    }
    else
    {
        temp = q;
        while(temp->nxt != NULL)
        {
            temp = temp->nxt;
        }
        r = (struct node*)malloc(sizeof(struct node));
        r -> data = num;
        r -> nxt = NULL;
        temp->nxt = r;
    }
}

void display(struct node *q)
{
    while(q != NULL)
    {
        printf("%d",q->data);
        q = q->nxt;
    }
}


int main()
{
    struct node *a;
    a= NULL;
    append(a,10);
    append(a,11);
    append(a,12);
    display(a);
    return 0;
}
4

2 に答える 2

1

append最初のパラメーター (リスト ヘッド) のアドレスをアドレスでメソッドに渡す必要があります。書かれているように、値渡しであるため、最初の呼び出し (および後続の各呼び出し) で NULL を渡しています。

プロトタイプは次のようになります。

void append( struct node **q, int num )

そして、次のように呼び出します。

append(&a,10);

appendパラメータの変更を正しく処理するには、それに応じて関数を更新する必要があることに注意してください。

于 2012-06-09T16:09:31.113 に答える
1

append のプロトタイプを次のように変更する必要があります。

void append( struct node **q, int num );

aasのアドレス&aをこの関数に渡します。これは、C が値渡しのみをサポートしているためです。詳細については、こちらをご覧ください。

以下のように変更された追加機能を見つけてください。

void append( struct node **q, int num ) 
{     
  struct node *temp,*r;     

  if(*q == NULL)     
  {         
     temp = (struct node*)malloc(sizeof(struct node));
     temp -> data = num;
     temp -> nxt = NULL;
     *q = temp;
  }
  else
  {
     temp = *q;
     while(temp->nxt != NULL)
     {
         temp = temp->nxt;
     }
     r = (struct node*)malloc(sizeof(struct node));
     r -> data = num;
     r -> nxt = NULL;
     temp->nxt = r;
 } 
} 

加えて:

以下の行を変更します。

printf("%d",q->data); 

なので

printf("%d\n",q->data); 

一部の端末では改行がない限り、printf はデータをフラッシュしない場合があります。

于 2012-06-09T16:10:22.427 に答える