PREFACE:目标是提示用户输入,将每个元素(输入行)添加到链接列表中。
我一直在玩一些示例代码学习C.org,它显示了一个链表示例。
我修改了代码,使其采用“字符串”而不是整数。
My insert函数如下:
void push(node_t * head, char *data) {
node_t * current = head;
if(head == NULL) {
printf("First element ever!\n");
}
else if(current->data == NULL) {
current->data = data;
current->next = NULL;
}
else {
while (current->next != NULL) {
current = current->next;
}
current->next = malloc(sizeof(node_t));
current->next->data = data;
current->next->next = NULL;
}
}
现在,在 MAIN 中,我按如下方式启动列表:
node_t * test_list = malloc(sizeof(node_t));
添加元素是通过以下方式完成的:
push(test_list, "FOO");
push(test_list, "FEE");
push(test_list, "FAA");
打印列表时,使用打印列表(测试列表),我得到以下输出:
FOO
FEE
FAA
PROBLEM
但是,我随后添加了一个 while 循环,提示用户输入并将其添加到链接列表中。
char command[120];
int counter = 0;
while(counter < 3) {
printf("Enter element: ");
fgets((void *)command, sizeof(command), stdin);
push(test_list, command); //Insert
counter++;
}
但是,这不会将每个元素添加到链接列表中。相反,它将 LAST 元素添加到列表中三次。
例如,当提供:
Enter element: Argentina
Enter element: Mexico
Enter element: Sweden
该列表打印如下:
FOO
FEE
FAA
Sweden
Sweden
Sweden
EDIT(新增打印功能)
My print函数如下:
void print_list(node_t * head) {
node_t * current = head;
printf("**** Printing list ****\n");
while (current != NULL) {
printf("%s\n", current->data);
current = current->next;
}
}
我缺少什么,或者:我该如何解决这个问题?非常感谢任何帮助。