void add(llist *list, lnode *newNode){
list->size++;
addRecursion(&list->head, newNode);
}
lnode* addRecursion(lnode **node, lnode *newNode){
if(*node == NULL){
*node = newNode;
}
else{
lnode *nextNode = (*node)->next;
(*node)->next = addRecursion(&nextNode, newNode);
}
return *node;
}
这段代码运行良好..我在网上看了一下代码,做了一些修改。但是我仍然不明白为什么addRecursion函数必须有返回类型。我像这样修改了函数
void addRecursion(lnode **node, lnode *newNode){
if(*node == NULL){
*node = newNode;
}
else{
lnode *nextNode = (*node)->next;
addRecursion(&nextNode, newNode);
}
}
然后它就不起作用了..
发布于 2011-03-25 08:16:00
它总是返回它存储到*node中的值,并且在修改后的代码中它会丢失该值,因为递归调用传递的是一个本地temp,而不是它实际需要放置该值的位置,然后在返回后进行存储。一个非常奇怪的构造。只要去掉本地变量,就可以使addRecursion无效(也更简单):
void addRecursion(lnode **node, lnode *newNode){
if(*node == NULL){
*node = newNode;
}else{
addRecursion(&(*node)->next, newNode);
}
}
发布于 2011-03-25 07:44:59
将某物分配给(*node)->next
这指向列表的下一个节点,我想。因此,如果没有该赋值,列表将不会转到要添加新节点的最后一个节点。递归可以用迭代代替。
发布于 2011-03-25 07:48:39
因为该函数返回下一个节点的地址,这是您的算法中设置最后一个节点所必需的。
https://stackoverflow.com/questions/5426916
复制相似问题