在我的递归考试中,我必须编写递归函数,该递归函数通过链接列表,并删除所有不包含某些数据的节点,并计算C 中删除的节点的数量。我不允许使用静态函数,静态局部变量或全局变量。我该怎么做呢?
特别是使用的函数是: int remove_except(node *& head,node *& tail),并且在线性链接列表中使用。如果不使用上面列出的三种方法之一,我找不到任何方法来计算被删除的节点的数量。
由于您无法使用变量或参数,因此仅留下一个选项 - 使用函数的返回值。
对于递归函数的每个调用,请执行以下操作:
-
如果输入节点在列表的末尾,请返回0。
-
否则,如果删除输入节点,请返回1 下一个调用的返回值(使用下一个节点作为输入)。
-
否则,返回下一个调用as-is的返回值(使用下一个节点作为输入)。
所有调用都完成后,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);
}