我试图创建链表,但节点没有正确链接。我在代码中遗漏了一些内容。我不知道它是什么。
typedef struct sllist{
int x;
struct sllist *next;
} slilist;
slilist *head=NULL, *tail=NULL;
void add_to_List(int val){
slilist *temp = malloc(sizeof(slilist));
temp->x = val;
temp->next = NULL;
if(!head){
head = temp;
tail = temp;
}else{
tail->next = temp;
}
}
int main()
{
int y;
for(y = 0; y<10; y++)
add_to_List(y);
while(head){
printf("%d\n",head->x);
head=head->next;
}
return 0;
}
我的输出是:
0
9
答案 0 :(得分:2)
尝试改变:
if(!head) {
head=temp;
tail=temp;
} else {
tail->next=temp;
tail = temp;
}
事实上,您忘记在tail
声明中更改else
:
tail = temp;
答案 1 :(得分:2)
您无法更新tail
,因此新元素都在头部之后链接。
void add_to_List(int val){
slilist *temp = malloc(sizeof(slilist));
temp->x=val;
temp->next=NULL;
if(!head){
head=temp;
tail=temp;
}else{
tail->next=temp;
tail=tail->next; /* add this line */
}
}
此外,您应free()
通过malloc()
分配的所有内容。
int main()
{
int y;
for(y=0; y<10; y++)
add_to_List(y);
while(head){
slilist *head_bak = head; /* add this line */
printf("%d\n",head->x);
head=head->next;
free(head_bak); /* add this line */
}
return 0;
}
答案 2 :(得分:0)
您可以添加以下代码:
typedef struct sllist{
int x;
struct sllist *next;
} slilist;
slilist *head=NULL, *tail=NULL;
void add_to_List(int val){
slilist *temp = malloc(sizeof(slilist));
temp->x = val;
temp->next = NULL;
if(!head){
head = temp;
tail = temp;
}else{
while (tail->next !=NULL)
{
tail = tail->next;
}
tail->next = temp;
}
}
int main()
{
int y;
for(y = 0; y<10; y++)
add_to_List(y);
while(head){
printf("%d\n",head->x);
head=head->next;
}
return 0;
}