C++:正在检查LinkedList中的回文-递归方法-错误
C++ : Checking for palindrome in LinkedList - recursive method - error
我试图通过递归地向下到列表中的最后一个节点并比较列表中的第一个节点和最后一个结点来在给定的链表中找到回文。
我的LinkedList有一个带有int值成员和指向下一个节点的指针的标准节点。
我将一个指向head节点指针的指针作为第一个参数,并在每次成功匹配时将其更改为下一个参数,但我在语法中遇到了错误。有人能解释一下我为什么会出现这个错误吗?
代码片段:
bool isPalindromeRecur(Node** left, Node* right){
if(right == nullptr) return true;
bool isP = isPalindromeRecur(left,right->next);
if(!isP) return false;
bool isP1 = (*(left)->val == right->val);
*left = *(left)->next;
return isP1;
}
我在第5行和第6行出现错误。
error: request for member 'val' in '* left', which is of pointer type 'Node*' (maybe you meant to use '->' ?)
bool isP1 = (*(left)->val == right->val);
^~~
error: request for member 'next' in '* left', which is of pointer type 'Node*' (maybe you meant to use '->' ?)
*left = *(left)->next;
^~~~
您应该在两行中使用(*left)->...
而不是*(left)->...
。->
运算符比*
运算符具有更高的偏好,因此*(left)->next
将被解析为*(left->next)
。由于left
的类型是Node **
,这将类似于尝试访问指针的next
成员。
递归调用应处于所有必需条件下。您的第一个条件是错误的,并且不够强,无法通过递归调用进行休耕。
另外,第一个参数Node** left
类型是一个过度使用。当您需要修改列表(插入或删除项(时,这种参数非常有用。
bool isPalindromeRecur(Node* left, Node* right) {
assert(left);
assert(right);
if (left == right) return true; // for odd length
if (left->value != right->value) return false;
if (left->next == right) return true; // for even length
return isPalindromeRecur(left->next, right->prev);
}
如果你的列表不是双重链接的,那么这就更难做到。
相关文章:
- C++:正在检查LinkedList中的回文-递归方法-错误
- 数组元素打印的递归方法
- 回文递归版本
- 回文递归不停止
- 我对 leetcode 72 上的递归方法感到茫然
- 使用递归方法遇到分段错误
- 我的链接列表反向递归方法的代码的问题是什么?
- 在链接列表中找到值的递归方法
- 我应该如何实现递归方法以找到在C++中形成最大堆的多种方法
- 使用递归方法将矢量作为输入时进行分割故障
- 使用递归方法的类,使用int矢量元素作为输入
- 3D 迷宫递归方法 - C++
- 这种遍历二叉树的递归方法在一些递归后崩溃!为什么?
- 迭代器回到递归方法的开头
- 如何创建一个递归方法来比较两个值
- 为什么将十进制转换为二进制的递归方法比迭代、使用和返回字符串更快
- 递归方法中的 C++ 凸包
- 如何将查找组合的几个循环代码转换为递归方法
- 删除单向链表最后一个元素的递归方法
- 反转字符串的递归方法