C++ 使用void函数反转链表
我看到了一种使用递归和函数反转链表的方法,但该函数返回节点数据类型,但我想使用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 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以保存最后一个节点,使其成为新的头。但很抱歉,您的解决方案不正确