释放整个链表,这个算法是否正确?

Hoo*_*lum 1 c free recursion linked-list

这可能吗?或者是否会丢失名单?因为我无法检查它是否正常工作

void FreeRecurs(struct nodeTag *pFirst)
{
    if(pFirst != NULL)
    {   
            FreeRecurs(pFirst -> pNext);
            free(pFirst);
    }
}
Run Code Online (Sandbox Code Playgroud)

ick*_*fay 6

这将有效,但在长列表中,您可能会得到堆栈溢出,因为您正在递归很多并且不使用尾递归.我将转向迭代版本:

  • 虽然当前节点不是NULL:
    • 存储指向下一个节点的指针.
    • 释放当前节点.
    • 使用您在释放之前存储的指针开始处理下一个节点.