C++ 使用void函数反转链表

C++ 使用void函数反转链表,c++,linked-list,C++,Linked List,我看到了一种使用递归和函数反转链表的方法,但该函数返回节点数据类型,但我想使用void返回类型的函数,我提出了一种方法- void reverseLLrecursion(node* &head){ if(head==NULL||head->next==NULL){ return ; } else{ node* temp=head ; while(temp->next!=N

我看到了一种使用递归和函数反转链表的方法,但该函数返回节点数据类型,但我想使用void返回类型的函数,我提出了一种方法-

void reverseLLrecursion(node* &head){
    if(head==NULL||head->next==NULL){        
        return ;
    }
    else{
        
        node* temp=head ;
        while(temp->next!=NULL){
             temp=temp->next ;
        }
        
        reverseLLrecursion(head->next) ;
        head->next->next=head ;
        head->next=NULL ;
        head=temp ;
    }

}
用于链接列表 1->2->3->4->NULL它给出了4->1->NULL的输出。 我不明白我的代码哪里出错了。
对错误输出的解释将不胜感激。

基本上您不需要这一行:

        head=temp;
请注意,“temp”总是指向最后一个节点(您称为4),因为在while循环中迭代到next==NULL。保持“温度”值没有意义

当递归遇到第一个条件时:

head->next==NULL
它返回上一个调用,将“next”节点的“next”指针设置为当前节点(因此“4”指向“3”),然后将当前节点的“next”指针设置为NULL(这很重要,因为它点击“1”时必须指向NULL)

您可以删除一些代码,这应该可以做到:

    void reverseLLrecursion(node* &head){
        if(head->next==NULL){        
            return ;
        }
        else
        {
            reverseLLrecursion(head->next);
            head->next->next=head;
            head->next=NULL; 
        }
    }

在处理链表时,在纸上绘制链表,然后遍历逻辑以查看每行代码如何影响绘图是很有帮助的。嘿,我存储了temp以保存最后一个节点,使其成为新的头。但很抱歉,您的解决方案不正确