【发布时间】:2020-07-10 02:07:51
【问题描述】:
我正在尝试删除年龄小于给定限制的所有用户节点。问题是这个函数的实现不正确。该算法必须是递归的。
输入示例:
詹妮弗 11 约翰 19 莎拉 17 马克 24输出示例:
(空) 11 约翰 19 17 马克 24代码如下:
struct list *delete_node(struct list *l, int limit) {
if (l != NULL) {
if (l->age < limit) {
struct list *tmp;
tmp = l->next;
free(l);
}
if (l->next != NULL)
l->next = delete_node(l->next, limit);
else
return l;
}
}
【问题讨论】:
-
为什么一定要递归?我宁愿把它写成一个循环遍历列表的所有元素,删除那些符合条件的元素。
-
@G.Sliepen 因为这是作业
-
@G.Sliepen 我希望它也可以迭代编写哈哈哈
-
你设置了
tmp = l->next,但是你再也不会对tmp做任何事情了。此外,return list不会编译,您可能是指return l。还要考虑这应该在else分支还是其他地方。 -
@G.Sliepen 对不起,我忘了编辑返回列表(这是一个错字),在我的标准 delete_node 算法中,我在释放 l 后有一个返回 tmp,但现在我不能使用它,因为如果我return tmp 它将(成功)删除匹配的第一个用户。我需要全部删除它们,所以我认为删除 return tmp 是个好主意,但事实并非如此。
标签: c recursion linked-list singly-linked-list function-definition