0

しばらく前に、リンクされたリストについて質問したところ、良い返事がありました...今、提案を使用して新しいコードを書きましたが、エラーが発生しました。コードは次のとおりです。

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
    int data;
    struct node *next;
}node;
node *mknode()
{
    return malloc(sizeof(node));
}
void create(node* h, int num)
{
    int i;
    node *temp=h;
    for(i=0;i<num;i++)
    {
        temp->data=i;
        if(i==(num-1))
            temp->next=NULL;
        else
            temp->next=mknode();
        temp=temp->next;
    }
}
node* add_end(node *h,int num)
{
    node *temp;
    if(h==NULL)
    {
        h=mknode();
        temp=h;
        create(h,num);
    }
    else
    {
        temp=h;
        while(h!=NULL){
            h=h->next;}
        h=mknode();
        create(h,num);
    }
    return temp;
}
void display(node *h)
{
    node *temp=h;
    while(temp!=NULL)
    {
        printf("%d->",temp->data);
        temp=temp->next;
    }
}
int main()
{
    node *head=NULL;
    int num;
    scanf("%d",&num);
    head=add_end(head,num);
    head=add_end(head,num);
    display(head);
    //printf("%d",list_len(head));
    free(head);
    return 0;
}

3 の入力に対して add_end を 2 回呼び出したので、出力は 0->1->2->0->1->2-> のはずですが、代わりに 0->1->2-> を取得しています

create 関数内の FOR ループが n の入力に対して 2n 回実行されていることを確認しました。問題は、表示機能で NULL が発生することですが、コードのどこで発生しているのかわかりません。

すべての助けに感謝します。事前に感謝します-user1614886

4

1 に答える 1

3

add_end()ノードを正しくリンクしていません。

[blah blah]
else
{
    temp=h;
    while(h!=NULL){
        h=h->next;}
    h=mknode();
    create(h,num);
}

hそれまで進みますが、そこまで移動して次のリストを追加するNULLだけです。h->next == NULL

于 2012-09-04T13:32:38.027 に答える