繁体   English   中英

C++:检查 LinkedList 中的回文 - 递归方法 - 错误

[英]C++ : Checking for palindrome in LinkedList - recursive method - error

我试图通过递归地向下到列表中的最后一个节点并将第一个节点与列表中的最后一个节点进行比较来在给定的链表中找到回文。

我的 LinkedList 具有标准节点,其中包含一个 int 值成员和一个指向下一个节点的指针。

我将指向头节点指针的指针作为第一个参数传递,并在每次成功匹配时将其更改为下一个,但语法错误。 有人可以解释为什么我会收到此错误吗?

代码片段:

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) 由于leftNode **类型,这就像试图访问指针的next成员一样。

递归调用应该在所有需要的条件下。 您的第一个条件是错误的,并且强度不足以被递归调用解决。

第一个参数Node** left type 也是一种矫枉过正。 当您需要修改列表(插入或删除项目)时,这种参数很有用。

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);
}

如果您的列表没有双重链接,那么这将更难做到。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM