你好,这是我的代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct data{
int a;
struct data *p;
}data;
void add(data *begin, data *new);
int main(void){
data *first = malloc(sizeof(data));
data *second = malloc(sizeof(data));
data *third = malloc(sizeof(data));
first->a = 1;
first->p = second;
second->a = 2;
second->p = third;
third->a = 3;
third->p = NULL;
data *new = malloc(sizeof(data));
new->a = 4;
add(first, new);
data *temp = first;
do{
printf("%i\n", temp->a);
temp = temp->p;
}
while(temp->p != NULL);
return 0;
}
void add(data *begin, data *new){
data *temp = malloc(sizeof(data));
temp = begin;
while(1){
if(temp->p == NULL){
temp->p = new;
break;
}
else{
temp = temp->p;
}
}
}
代码很简单。但是当我运行它时,我总是得到3(它没有添加新列表)。请帮助我,我无法找到类似的问题,这可以帮助我。
答案 0 :(得分:4)
这些行:
data *temp = malloc(sizeof(data));
temp = begin;
1件事是错误的,因为你先分配内存然后再不使用它。您应该初始化temp
变量,例如data *temp = NULL;
。
这就是为什么你只获得前3项:
do{
printf("%i\n", temp->a);
temp = temp->p;
}
while(temp->p != NULL);
当一个项目没有下一个项目时,你的循环就会停止(因此它太早停止)。
相反,做这样的事情:
do {
printf("%i\n", temp->a);
temp = temp->p;
} while(temp != NULL);