我看到了一种使用递归函数反转链表的方法,但该函数返回节点数据类型,但我想使用具有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"下一个"的指针节点指向当前节点(因此'4'指向'3'),然后设置当前节点"指向NULL的指针(这很重要,因为它命中'1'必须指向NULL)。
你可以删除你的一些代码,这应该可以达到目的:
void reverseLLrecursion(node* &head){
if(head->next==NULL){
return ;
}
else
{
reverseLLrecursion(head->next);
head->next->next=head;
head->next=NULL;
}
}