我尝试打印链接列表,但它没有打印列表中的所有成员。您解释我的代码中的问题是什么?是代码行(newhead = newhead-> next)移动甚至列表的其余部分是在另一个函数上?
#include <stdio.h>
#include <stdlib.h>
struct test_struct{
int data;
struct test_struct *next;
};
struct test_struct* create();
void add_node();
int main()
{
add_node();
return 0;
}
void add_node()
{
struct test_struct* head = create();
struct test_struct* newhead;
newhead = malloc(sizeof(struct test_struct));
newhead->data=2;
newhead->next=head;
head=newhead;
while(newhead->next != NULL)
{
printf("%d\n",newhead->data);
newhead=newhead->next;
}
}
struct test_struct* create()
{
struct test_struct* head=NULL;
struct test_struct* temp = (struct test_struct*)malloc(sizeof(struct test_struct));
if(NULL==temp)
{
printf("error in memory");
return 0;
}
temp->data=5;
temp->next=head;
head=temp;
return head;
}
答案 0 :(得分:3)
当while循环位于没有next
节点的节点上时,它会停止;它不会在该节点上打印数据。
相反,您希望在指向无节点时停止;也就是说,就在你的名单“落到最后”之后:
while(newhead != NULL)
{
printf("%d\n",newhead->data);
newhead=newhead->next;
}
答案 1 :(得分:1)
第26行应为while (newhead != NULL)
。
如果你想继续增长,你还可以查看每个函数的用途,因为add_node()
和create()
几乎完全相同,加上add_node()
也打印列表,这可能是一个单独的功能的目的。