我试图编写这个函数来反转单链表,但我无法找到这里出了什么问题。
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/