gpt4 book ai didi

c - 链表递归..为什么我需要 return 语句?

转载 作者:太空宇宙 更新时间:2023-11-04 01:14:13 24 4
gpt4 key购买 nike

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

}
}

然后就不行了..

最佳答案

它总是返回它存储到 *node 中的值,并且在您修改后的代码中它会丢失该值,因为递归调用传递的是本地温度而不是它实际需要放置值的位置,然后在它之后进行存储返回。一个非常奇怪的构造。如果你只是摆脱那个局部变量,你可以使 addRecursion 无效(并且更简单):

void addRecursion(lnode **node, lnode *newNode){
if(*node == NULL){
*node = newNode;
}else{
addRecursion(&(*node)->next, newNode);
}
}

关于c - 链表递归..为什么我需要 return 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5426916/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com