【发布时间】:2021-08-05 20:00:07
【问题描述】:
现在假设我想编写一个函数,递归地搜索链表中的某个节点。当我成功到达目标节点时,这个函数会通过引用返回它的ID和其他信息,它的ID将通过struct存储:
struct P{
int ID;
int some_info;
P* next_node;
}
函数类似于
void search(int targeted_ID, P*& current_node){
P* c = current_node;
if(c->ID == targeted_ID){
current_node = c;
}
if(c->next_node == nullptr){
return;
}
else{
search(ID, current_node->next_node);
}
}
输出语句将类似于
cout << "The targeted node have ID= " << current_node->ID << "with" << current_node->some_info << endl;
但是,这个函数会自己递归调用,直到所有节点都到达并检查完,并且指针current_node的值会在整个过程中不断变化。
主要问题是如何在进行递归时保持它的值不变。
附言存在以下限制:
- 无法添加任何全局变量
- 不能使用任何静态变量
- 无法在 void 函数中添加任何参数
- 不能使用数组
- 无法更改
struct的内容 - 输出语句不能更改
- 无法使用
goto
【问题讨论】:
-
"不能在void函数中添加任何参数"?为什么,为什么不直接返回一个指向找到的节点的指针?