这是我的第一篇文章,要继续,我在函数中遇到问题,该函数在列表末尾添加数据.. 这是我的代码: (代码中有一些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;
}
它没有添加任何内容,并且长度仍然相同..请问是什么问题?
非常感谢您的参与
答案 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;
}