c - 打印链表数据时只打印第一个元素

标签 c memory data-structures linked-list dynamic-memory-allocation

我编写这段代码是为了让用户在列表中输入他们想要的节点数,以及每个节点的元素。只有当我尝试打印列表的值时,我的错误才会发生。好像我只打印列表的第一个值。或者我没有成功地将数据分配给列表。

注意“list.h”只包括stdio 和stdlib 库,以及结构定义。它只保存数据和指向同一结构的指针。

#include "list.h"

struct node *head = NULL;

void print_data(){

  struct node* temp;
  temp = head;

  printf("\n\n");

  while(temp != NULL){

    printf("%d ", temp->data);
    temp = temp->next;

  }
}

void insert(data){

  struct node *temp = malloc(sizeof(struct node));
  struct node *p;

  temp->data = data;
  temp->next = NULL;

  if( head == NULL ){

    head = temp;

  }else{

    p = head;

    while( p->next != NULL){

      p = p->next;
      p->next = temp;

    }
  }
}

int main(){

  int i, amount, element;

  printf("\nEnter Amound of Nodes: \n");
  scanf(" %d", &amount);

  for( i = 0; i < amount; ++i){

    printf("\nEnter Node #%d amount ", i + 1);
    scanf(" %d", &element);
    insert(element);

  }

  print_data();

}

最佳答案

您的插入有误。假设你想在链表的最后插入节点。但是您的代码在列表的开头插入节点而没有正确处理列表的其余部分。因此,您列表的其余部分将会丢失。

while( p->next != NULL){

      p = p->next;
      p->next = temp;
}

应该是

while( p->next != NULL){

      p = p->next;

}
     p->next = temp;

关于c - 打印链表数据时只打印第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51815289/

相关文章:

c - 在 c 中为数组赋值时出现意外结果

c# - List<long> vs long[],内存使用

c++ - [c++/pointers] : having objects A and B (B has vector member, 存储指向 A 的指针),知道 A 是否可以检索指向 B 的指针?

go - "value semantics’ "和 "pointer semantics"在 Go 中是什么意思?

c++ - 包含对自身或其他结构类型的引用的结构?

c - 如何处理具有多个退出点的函数的函数退出?

c - 增加亮度并不能产生预期的效果

c - 为什么在不对变量进行任何修改的情况下,两个 printf 语句之间打印的指针变量地址不同?

c - Valgrind 无效写入大小 8

比较不同长度的 C char 数组