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 两次,因此输出应该是 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 回答