void reverseLinkedList(Node* &head)
{
if (head == nullptr || head->next == nullptr)
{
return ;
}
Node* Rest = head->next;
reverseLinkedList(Rest);
head->next->next = head;
head->next = nullptr;
head = Rest;
}
int main()
{
Node* h = nullptr;
Create(h, 4);//create linked-list with N nodes
reverseLinkedList(h);
Print(h);
}
根据调试,Rest变量在堆栈展开期间仍然具有相同的值。每个调用堆栈都应该更改吗?但每次调用时它仍然具有相同的值。
Rest 变量在堆栈展开期间仍然具有相同的值。
这是预料之中的。
当最后一次递归调用发生时,局部变量
Rest
被初始化为尾节点,该调用返回的 after 被分配给按引用传递 head
变量。这个 head
引用是调用者的 Rest
变量,因此调用者的本地 Rest
现在也指向尾部。因此,展开继续,每个 head = Rest
将该尾部引用复制到调用者的 Rest
变量(因为 head
是一个按引用传递参数)。
head = Rest
分配确实就像返回调用者的“门户”。因此,每个调用者都会获得自己的 Rest
变量来指向原始尾节点,该节点现在是反转列表的头。