我写了一个代码来附加节点,如果是空的话。 我认为我的代码和逻辑是正确的,但我仍然无法得到任何答案。它的编译但在运行后没有显示任何结果。请告诉我原因
#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;
}
答案 0 :(得分:1)
您需要按地址将第一个参数(列表头)的地址传递给append
方法。如上所述,它在第一次调用(以及每次后续调用)中传递NULL,因为它传递了值。
原型看起来应该是这样的:
void append( struct node **q, int num )
然后拨打这样的电话:
append(&a,10);
请注意,需要相应更新函数append
以正确处理参数更改。
答案 1 :(得分:1)
追加原型需要改为
void append( struct node **q, int num );
并将a
的地址作为&a
传递给此函数。这是因为C只支持pass by value。详细了解here。
请找到修改后的附加功能,如下所示:
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;
}
}
另外:
Chane以下行:
printf("%d",q->data);
as
printf("%d\n",q->data);
除非某些终端中有换行符,否则printf可能无法刷新数据。