-1

我尝试打印一个链接列表,但它没有打印列表中的所有成员。你能解释一下我的代码中有什么问题吗?代码行 (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;
}
4

2 回答 2

3

当您的 while 循环在没有节点的节点上时停止next;它不会打印该节点上的数据。

相反,您想在它没有指向节点时停止;也就是说,就在它“从列表的末尾掉下来”之后:

while(newhead != NULL)
{
    printf("%d\n",newhead->data);
    newhead=newhead->next;
}
于 2013-11-14T17:25:20.600 回答
1

第 26 行应该是while (newhead != NULL).

如果您想继续增长,您还可以查看每个函数的目的,因为add_node()create()正在做几乎相同的事情,add_node()而且还会打印列表,这可能是单独函数的目的。

于 2013-11-14T17:33:19.237 回答