在堆栈展开期间,该值不会改变递归

问题描述 投票:0回答:1
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变量在堆栈展开期间仍然具有相同的值。每个调用堆栈都应该更改吗?但每次调用时它仍然具有相同的值。

algorithm recursion linked-list stack stack-unwinding
1个回答
0
投票

Rest 变量在堆栈展开期间仍然具有相同的值。

这是预料之中的。

当最后一次递归调用发生时,局部变量

Rest
被初始化为尾节点,该调用返回的 after 被分配给按引用传递
head
变量。这个
head
引用是调用者的
Rest
变量,因此调用者的本地
Rest
现在也指向尾部。因此,展开继续,每个
head = Rest
将该尾部引用复制到调用者的
Rest
变量(因为
head
是一个按引用传递参数)。

head = Rest
分配确实就像返回调用者的“门户”。因此,每个调用者都会获得自己的
Rest
变量来指向原始尾节点,该节点现在是反转列表的头。

© www.soinside.com 2019 - 2024. All rights reserved.