我正在尝试编写此函数来反向链接单链列表,但我无法在这里找到问题所在。
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 *'的解决方案,但也有一些其他类型,但我想找出实现问题所在
答案 0 :(得分:3)
您有一个条件为if(c = NULL)
的作业。这是有效的c / c ++,并将为c分配NULL。然后将赋值的结果(NULL)用作if语句中的条件,该条件将始终为false。
将分配替换为相等性比较(==
)
在您的情况下使用副作用是不明智的做法,应避免使用。它可能导致难以发现错误。即使您要分配人,也应该在if语句之前使用它,然后检查变量。
其他不利的副作用可能是诸如if (someExpression && (a++ == 5))
之类的情况,根据编译器的设置,a可能会增加也可能不会增加。
答案 1 :(得分:1)
在if语句中,您将NULL分配给c。将“ =”替换为“ ==”。我想更改ordwrite之类的if(NULL == variable)之类的,因为如果我错过一个“ =”,我会得到一个错误。