首页 > 解决方案 > 在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;
    }
}

标签: crecursionlinked-listsingly-linked-listfunction-definition

解决方案


您的函数有多个问题:

  • l如果isNULL或 if l->nextis ,您不会返回任何内容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;
}

推荐阅读