C.中的链表无法在最后添加元素

时间:2014-03-18 15:36:42

标签: c struct linked-list

你好,这是我的代码:

#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(它没有添加新列表)。请帮助我,我无法找到类似的问题,这可以帮助我。

1 个答案:

答案 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);