0

何らかの理由で、リンクリスト全体を印刷できません。どこが間違っているのでしょうか?助けてください。前もって感謝します。

リストの基本構造。

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

typedef struct node *list;

主な機能。

int main()
{
    int i, j, k, l;
    list head = NULL, start = NULL, temp, p;

    printf("Enter the number of nodes in the list: ");
    scanf("%d", &k);

リンクリストの作成。

    for(i=0;i<k;i++)
    {
        if (i==0)
        {
            start = (list) malloc(sizeof(struct node));
            start->num = i;
            head = start;
            head->next = NULL;
        }
        else
        {   
            temp = (list) malloc(sizeof(struct node));
            temp->num = i;
            head->next = temp;
            head->next = NULL;
        }
    }   

リンクリストを印刷します。

    p = start;
    while(p != NULL)
    {
        printf("%d", p->num);
        p = p->next;
    }
    return 0;
}
4

2 に答える 2

3
        temp = (list) malloc(sizeof(struct node));
        temp->num = i;
        head->next = temp;
        head->next = NULL;

新しい要素を常に2番目の要素として配置し、それを削除します。事実上、一定サイズのリストを1にします。

おそらく、temp->next = NULL(の代わりにhead->next設定し、 element->next = temp-を設定する必要があります。ここelementで、はリストの最後の要素です(ではありませんhead)。
(別の方法は、要素をnewとして追加し、headsetすることですtemp->next = head;

于 2012-08-19T11:11:21.980 に答える
3

あなたはここで何かを逃していませんか:

head->next = temp;
head->next = NULL;

head次を。でオーバーライドしていますNULL。あなたはhead最初のポイントを持っている必要がありますtemp

head->next = temp;   // (4) see my comment on this post for 
head = temp;         // (5) the meaning of the number
head->next = NULL;   // (6)

編集:ちなみに、名前headcurrent/lastまたはそのようなものに変更する必要があります。headそうでなければ、との意味を簡単に入れ替えることができますstart

于 2012-08-19T11:12:28.250 に答える