使用递归在List中查找int类型-何时返回
C++: Using recursion to find an int in a List - When to return
我试图递归地通过列表类中的每个节点移动,以查找列表中的一个节点中是否存在某个整数。
我的头文件:
class List
{
public:
bool find(int d) const { return false; }
private:
Node *head;
bool findNode(const Node*, int) const;
};
下面是两个函数的代码:
bool List::find(int d) const
{
return findNode(head, d);
}
bool List::findNode(const Node* n, int d) const
{
if (n == NULL)
return false;
else if (n->data == d)
return true;
else
findNode(n->next, d);
}
现在这是我的问题:我是否通过在findNode
函数中添加if (n == NULL)
语句来使它总是返回false来毁灭自己?我不认为我需要这样做,如果我已经在头文件中有return false
。我应该去掉这条线吗?有没有更好的方法?
if (n == NULL) return false
很好,因为它只会在您到达列表末尾时发生,并且您应该返回false。
我看到的第一个问题是findNode(n->next, d);
应该是return findNode(n->next, d);
第二点是需要从头文件中删除find()
的函数体。函数体不能定义两次。
class List
{
public:
bool find(int d) const;
private:
Node *head;
bool findNode(const Node*, int) const;
};
bool List::find(int d) const
{
return findNode(head, d);
}
bool List::findNode(const Node* n, int d) const
{
if (n == NULL)
return false;
else if (n->data == d)
return true;
else
return findNode(n->next, d);
}
您需要null检查,因为这是确定列表结束的方式。我猜你是在做练习,否则显然你根本不需要递归
相关文章:
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 多维数组 C++ 中数组下标的类型"int[int]"无效
- 指针问题:从不兼容的类型"int"分配给"int *"
- 数组类型 int[n][n] 不可赋值,因为表达式必须具有常量值
- 错误:数组下标的类型"int[int]"无效
- 运行时错误:引用绑定到类型"int"的未对齐地址0xbebebebebebebec6,这需要 4 个字节对齐 (stl_vector.h)
- 类型为 "int*" 的参数与 C++ 中错误类型"int**"参数不兼容
- 类型"int"和"const char [15]"到二进制"运算符<<"的无效操作数^
- 从类型bankAccount的返回值到函数返回类型int没有可行的转换
- for 循环说 - 错误 成员引用基类型"int [13]"不是结构或联合
- 运行时错误:有符号整数溢出:964632435 * 10 无法在类型 'int' 中表示
- 如何增加模板类型 int 参数?
- 尝试使用 Array 类的模板构造整数数组时,错误:为什么数组类型"int [5]"不可分配,
- 如何为底层类型 int 的枚举专门化类
- 数组下标编译的无效类型'int[int]'由于 -Wfatal 错误而终止
- 不能将 "const char*" 类型的值分配给类型 "int" 的实体
- 数组下标的无效类型INT [INT]
- 请求在"伺服控制器"中请求成员"附加",该成员属于非类类型"int"
- 数组类型 'int [8]'不可分配
- 未声明的标识符和类型"int"从 main 调用类时出现意外错误