C 语言中的链表。无法在末尾添加元素



你好,这是我的代码:

#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);

相关内容

  • 没有找到相关文章

最新更新