对于我的递归检查,我必须编写一个遍历链表的递归函数,并删除所有不包含某些数据的节点,并计算在c ++中删除的节点数。我不允许使用静态函数,静态局部变量或全局变量。我该怎么做呢?
具体使用的函数是: int remove_except(node *& head,node *& tail),它用于线性链接列表。我没有办法在不使用上面列出的三种方法之一的情况下计算删除的节点数。
答案 0 :(得分:1)
由于您无法使用变量或参数,因此只留下一个选项 - 使用函数返回值。
对于递归函数的每次调用,请执行以下操作:
如果输入节点位于列表的末尾,则返回0.
否则,如果删除了输入节点,则返回1 +下一次调用的返回值(使用下一个节点作为输入)。
否则,按原样返回下一个调用的返回值(使用下一个节点作为输入)。
当所有调用都完成后,1s将加起来作为控制工作,将调用堆栈备份回原始调用者。
例如:
int remove_except(node * & head, node * & tail)
{
if (!head) return 0;
node *next = head->next;
if (... /* head is to be removed */)
{
removeNode(head, tail);
return 1 + remove_except(next, tail);
}
return remove_except(next, tail);
}