c++ - 递归反转链表的函数

标签 c++ pointers recursion linked-list nodes

我试图编写这个函数来反转单链表,但我无法找到这里出了什么问题。

void reverse(node *&c, node *&p){
    if(c = NULL){
        c = p;
        return;
    }
    node *n = c->next;
    c->next = p;
    p = c;
    c = n;
    reverse(c, p);
}

c = 当前节点,p = 前一个节点,n = 下一个节点。

我在互联网上找到了多个返回类型为“node*”的解决方案以及其他一些解决方案,但我想找出我的实现出了什么问题

最佳答案

您的条件 if(c = NULL) 中有一个赋值。这是有效的 c/c++,并将把 NULL 赋给 c。然后,赋值结果 (NULL) 将用作 if 语句中的条件,该语句将始终评估为 false。

用相等比较替换赋值 (==)

根据您的情况使用副作用是不好的做法,应该避免。它可能会导致很难发现错误。即使你想要一个赋值符,你也应该在 if 语句之前使用它,然后检查变量。
其他不好的副作用可能是诸如 if (someExpression && (a++ == 5)) 之类的事情,其中​​ a 可能会或可能不会增加,具体取决于编译器设置。

关于c++ - 递归反转链表的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55295419/

相关文章:

c++ - 何时使用构造函数和析构函数,尤其是在容器和跨线程中

c++ - 指向给定内存地址的指针-C++

java - 为什么我在这段代码中收到无限递归警告,尽管它不是无限的?

java - 如何使用递归在链表中成对交换节点?

javascript - 将平面对象数组转换为嵌套树(位置数据)

c++ - 关闭管道时收到双重释放或损坏(顶部)?

c++ - 重载类本身

c++ - 测试文件是否具有所需权限的好方法是什么?

c - int * 和 int [] 之间的实际区别是什么?

c - 将 char * 分配给另一个 char *