c - 在C中递归删除单个链接列表中具有多个字段的节点
问题描述
我正在尝试删除年龄小于给定限制的所有用户节点。问题是这个函数的实现不正确。该算法必须是递归的。
输入示例:
詹妮弗 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;
}
}
解决方案
您的函数有多个问题:
l
如果isNULL
或 ifl->next
is ,您不会返回任何内容NULL
。l
删除节点后无效。您应该delete_node(tmp, limit)
在free(l);
. 要拥有单个return
语句,您可以设置l
为该值。
这是修改后的版本:
struct list *delete_node(struct list *l, int limit) {
if (l != NULL) {
if (l->age < limit) {
struct list *tmp;
tmp = l->next;
free(l);
l = delete_node(tmp, limit);
} else {
l->next = delete_mode(l->next, limit);
}
}
return l;
}
推荐阅读
- php - 致命错误:未捕获的 PDOException:SQLSTATE [42000]:语法错误或访问冲突:1064 您有错误
- reactjs - 反应力过渡以在悬停时结束
- python - RuntimeWarning:在使用 seaborn 的 python pandas 中的 double_scalars 中遇到无效值
- delphi - REST DataSnap 中的 Content-Type 响应对我不起作用
- php - 比较具有不同扩展名的文件 - 保留更大的文件
- android - java.lang.RuntimeException 尝试从 Intent xssf 工作簿打开 excel 文件时出错
- url - next-translate 显示默认语言
- javascript - 如何查找字符串的所有实例并将其替换为编号字符串?
- python - Django添加材料
- html - 使用webbrowser控件VB.NET通过它的宽度获取网站表的价值