【发布时间】:2013-05-24 07:28:51
【问题描述】:
我已经检查了董事会,但找不到任何帮助。我发现在给定基本情况和一般情况的情况下实现递归函数很容易,但这不像我那样工作。我应该迭代一个列表,直到我到达一个链表的尾部。如果下一个节点为 NULL,那么我必须将值存储在最后一个节点,删除该节点,然后返回该值。所以它类似于出队方法,除了它是递归执行的。我究竟做错了什么?
int LinkedList::removeTailRec(Node *n)
{
// check for the base case(s)
if(n->next == NULL)
{
Node *tmp = new Node();
tmp = n;
int val = n->value;
tmp = NULL;
return val;
}
else
return removeTailRec(n->next);
// else call the recursive method
}
【问题讨论】:
-
我不认为你在做你认为你在用
*temp做的事情。 -
new但没有delete?你是在自找麻烦;) -
如果下一个节点为null,则在内存中分配一个新节点,然后通过重新分配其指针指向传入的节点来丢失指向它的指针,然后将指针分配给null,然后从传入的节点返回值,并泄漏已分配节点的内存,由于指针丢失,您无法删除。
-
您创建一个新节点并使用变量 tmp 获取指向它的 ptr。然后下一行将 tmp 设置为 n,失去对刚刚创建的节点的句柄。你确定这是你想要做的吗?
标签: c++ recursion linked-list