有时回来我问了一个关于链表的问题并得到了很好的答复......现在我已经使用这些建议写了一段新代码,但我遇到了一个错误。代码是:
#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;
}
现在因为我已经两次调用add_end输入3,所以输出应该是 0→1→2→0→1→2→ 但相反,我得到了 0→1→2→
我已经检查了这一点,创建函数中的FOR循环运行了nn次输入n。 所以问题是显示函数遇到NULL但我无法弄清楚它在代码中的位置。
所有帮助表示赞赏。 提前感谢 -user1614886
答案 0 :(得分:3)
在add_end()
中,您没有正确链接节点。
[blah blah]
else
{
temp=h;
while(h!=NULL){
h=h->next;}
h=mknode();
create(h,num);
}
您提前h
直至NULL
,但您应该只移至h->next == NULL
并在此处附加下一个列表。