前言:目标是提示输入的用户,添加各元素(输入线)转换成一个链表。Ç - 链表 - 插入元件不更新 - 仅加入最后一个输入元件
我一直在玩弄从Learn-C.org一些示例代码,它显示了一个链表的例子。 我修改了代码,以便它使用“字符串”而不是整数。
我插入功能如下:
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;
}
}
现在,在主,我发起名单如下:
push(test_list, "FOO");
push(test_list, "FEE");
push(test_list, "FAA");
:
node_t * test_list = malloc(sizeof(node_t));
添加元素与实现
打印清单时,使用print_list(test_list),我得到下面的输出:
FOO
FEE
FAA
问题
不过,我则包括一个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
编辑(添加打印功能)
我打印功能如下:
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;
}
}
我缺少什么,还或者:我怎样才能解决这个问题?任何帮助,高度赞赏。
我认为你应该使用'strcpy'复制的城市名称,使用指针可能无法在这种情况下工作,给他们指引。 – ameyCU
'node_t * test_list = malloc的(的sizeof(node_t)); test_list->数据= NULL;'...'推(test_list,的strdup( “FAA”));推(test_list,的strdup(命令));' – BLUEPIXY
如果你在推送到列表之前先打印“命令”字符串,那么你会看到你实际推送的内容,并确保你得到你想要的内容,因为它在循环之外工作。 –