我正在练习c中的链表,我想创建一个程序,从键盘读取条目并在添加每个节点后列出链表的内容,但输出始终是第一个节点,我不能找出原因,有人可以指出这段代码中的缺陷:
#include <stdio.h>
#include <stdlib.h>
typedef int ID;
typedef struct node {
ID id;
struct node * next;
} node_t;
int main(){
node_t * head;
node_t * conductor;
head = NULL;
ID id;
int i=0;
while(i<10){
printf("Introduce an id:\n");
scanf("%d", &id);
if(head == NULL){
head = malloc(sizeof(node_t));
head->id = id;
head->next = NULL;
}
else{
conductor = head;
while(conductor != NULL)
conductor = conductor->next;
conductor = malloc(sizeof(node_t));
conductor->id = id;
conductor->next = NULL;
}
conductor = head;
printf("the list contains these elements:\n");
while(conductor != NULL){
printf("%d\n", conductor->id);
conductor = conductor->next;
}
++i;
}
}
答案 0 :(得分:2)
他的问题出在你的while循环中
while (conductor != NULL)
要添加新节点,您需要在找到最后一个导体后设置conductor-&gt; next。 这样的事情可以奏效:
While (conductor->next != NULL)
答案 1 :(得分:2)
在插入之前,您正在运行列表的末尾。你应该去导体 - >接下来变成NULL,插入新节点并设置导体 - >接下来指向新节点。
其他一些指示:
addNode
,removeNode
,printList
等功能,答案 2 :(得分:1)
您需要以下内容
conductor = head;
// Find the last node in the list
while(conductor->next != NULL)
conductor = conductor->next;
// Setup the new node
node_t* newNode = malloc(sizeof(node_t));
newNode->id = id;
newNode->next = NULL;
// Have the last node's next pointer point to the new node
constructor->next = newNode;
关键是你将构造函数移动到列表中的最后一个节点,新节点将连接到最后一个节点之后的列表中。
通常使用链接列表,您应该跟踪当前的头部和尾部,这将在添加新节点时提高性能,您将注意到每次都需要遍历现有列表。