使用双指针和递归反转链表



我知道有很多答案,但我只是明白为什么我的代码不起作用。 你能帮忙吗?

void reverse_LList_R_fail(Node** head) {
Node* current = *head;
if(current->next == nullptr) {
*head = current;
return;
}
reverse_LList_R_fail(&(current)->next);
current->next->next = current;
current->next = nullptr;
}

PS:在我的LList实现中,我定义了Node* head = nullptr;作为一个全局变量,在我的理解中,我必须使用双指针。

对于初学者,该函数不检查*head是否等于nullptr。因此,该函数具有未定义的行为。

此外,通过指针传递到函数的原始头部也不会改变。

该函数可以如下所示

void reverse_LList_R_fail( Node **head ) 
{ 
if ( *head && ( *head )->next ) 
{ 
Node *current = *head; 
*head = ( *head )->next; 
reverse_LList_R_fail( head ); 
current->next->next = current; 
current->next = nullptr; 
}         
} 

并且该函数被调用为

reverse_LList_R_fail( &head );

相关内容

  • 没有找到相关文章

最新更新