函数在链表的末尾添加数据

时间:2019-04-22 22:42:23

标签: c

这是我的第一篇文章,要继续,我在函数中遇到问题,该函数在列表末尾添加数据.. 这是我的代码: (代码中有一些rq) 谢谢

typedef struct noeud {
    char c;
    struct noeud * next;
} Noeud;

typedef Noeud * car;

//for crt a dat in the last of the list
car addInLast(car T, char x) {
    car temp = malloc(sizeof(Noeud));
    car dat = malloc(sizeof(Noeud));
    temp = T;
    while (temp) {
        temp = temp - > next;
    }
    dat - > c = x;
    dat - > next = NULL;
    temp = dat;
    return T;
}
// crt in the frst
car addInFirst(car T, char x) {
    car temp;
    temp = malloc(sizeof(Noeud));
    temp - > c = x;
    temp - > next = T;
    T = temp;
    return T;
}

它没有添加任何内容,并且长度仍然相同..请问是什么问题?
   非常感谢您的参与

2 个答案:

答案 0 :(得分:1)

欢迎使用堆栈溢出。函数addInLast有一些缺陷。考虑以下循环:

while (temp) {
    temp = temp - > next;
}

此操作将一直持续到temp为空,并且不再与列表连接为止。然后,该函数将新数据放入新结构中,并返回指向原始列表的指针。 没有添加任何内容。

像这样的事情可能会更好:

while (temp->next) {
    temp = temp->next;
}

还有其他问题,在异常情况下(例如将元素添加到空列表中),您仍然必须小心,但这从开始就足够了。

将来,发布minimal complete examples而不是代码摘录是明智的。

答案 1 :(得分:0)

addInLast代码中存在一些问题,下面是解决了问题的函数,我添加了注释来解释问题

car addInLast(car T, char x) {
    car temp = NULL; // No Need to allocate new space for this pointer, we use 
                    // this pointer to traverse to end of list
    car dat = malloc(sizeof(Noeud));
    dat - > c = x;
    dat - > next = NULL;
    temp = T;

    if(temp == NULL){ // If the list is empty first node will be the node you 
                     // created
        T = dat;
        return T;
    }

    while (temp->next != NULL){ // This condition makes sure you reach the last 
                                // element of the list because for last elemt 
                                // next value is NULL
        temp = temp - > next;
    } 
    temp->next = dat;
    return T;
}