递归反向链接列表的功能

时间:2019-03-22 08:15:27

标签: 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 *'的解决方案,但也有一些其他类型,但我想找出实现问题所在

2 个答案:

答案 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)之类的,因为如果我错过一个“ =”,我会得到一个错误。