你好,这是我的代码:
#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("%in", 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(它不添加新的列表)。请帮助我,我找不到类似的问题,那可以帮助我。
以下几行:
data *temp = malloc(sizeof(data));
temp = begin;
是错误的一件事,因为你先分配内存,然后不使用它。您应该像初始化data *temp = NULL;
一样初始化temp
变量。
那么这就是为什么你只得到前3项:
do{
printf("%in", temp->a);
temp = temp->p;
}
while(temp->p != NULL);
当一个条目没有下一个条目时循环停止(因此它停止得太早)。
应该这样做:
do {
printf("%in", temp->a);
temp = temp->p;
} while(temp != NULL);