算法
递归反转链表中的每一个结点:
1.递归反转当前节点的下一个结点返回值设为pre
2.如果当前结点的下一个结点为空则此时已经找到链表的最后一个结点,这是递归的出口:head->next = curr ,return curr
3.从最后一个结点开始递归返回,将返回值作为当前结点的前驱结点
4.反转当前结点:pre->next = curr
void Reverse(){
if(head->next == nullptr){
return;
}
//从head后第一个结点开始反转每一个结点
Reverse(head->next);
}
Node* Reverse(Node* curr){
//如果当前结点的下一个结点为空证明已经是最后一个结点,递归结束开始返回
if(curr->next == nullptr)
{
head->next = curr;
return curr;
}
//1.递归反转当前结点的下一个结点:返回值作为当前结点的前结点pre
Node* pre = Reverse(curr->next);
//2.反转当前结点
pre->next = curr;
//3.将当前节点的下一个结点置空
curr->next = nullptr;
//return curr;
return curr;
}