在C中递归地从链接队列中删除

时间:2016-11-02 23:20:37

标签: c recursion queue

我已经获得了这个链接的队列代码,用于从C中的链接队列结构中删除一个元素。通常我会以不同的方式实现它,但是这段代码使用的是递归。它会做它应该做的事情,为什么?如果没有,有没有办法解决它,以便它呢?我对这个递归的事情真的很陌生。谢谢!

typedef struct telement T;
struct telement{
    int value;
    T* next;
};

void Out (T **A){
    if ((*A)->next == NULL){
        printf("\n --I'm removing element with value %d.---", (*A)->value);
        (*A) = NULL;
        free(*A);
    }
    else{
        Out(&(*A)->next);
    }
}

1 个答案:

答案 0 :(得分:2)

此函数会删除最后一个元素。请注意,在递归的最后一步,A将指向列表头指针或倒数第二个元素的next指针。

然后将此指针设置为NULL,取消链接列表中的最后一个元素。

但是,它不会释放最后一个元素,因为free(NULL)什么都不做。