反转C ++中的单链列表:堆栈中的指针

问题描述

我有一个由节点组成的链接列表,该节点有2个成员:

Node* next;
int val;

列表如下:

[head:0] -> [1] -> [2] -> [3] -> nullptr

我写了一个函数来反转这个列表。

void reverseList(Node* head) {
    Node* m = head->next;
    head->next = nullptr;
    
    while (m) {
    Node* n = m;
    
    m = n->next;
    n->next = head;
    head = n;
    printNode(head);
    }
}

int main() {
    // Create linked list here

    reverseList(&head);

    cout << "FXN ENDS" << endl;

    printNode(&head);
}

这将打印:

1 0 
2 1 0 
3 2 1 0
FXN ENDS
0

我知道一旦退出Node* nreverseNode就会被删除,因为n,m被分配在堆栈上。但是通过设置head=n;,即使退出功能后,n指向的内存也不应该仍然在堆中,因此head仍然指向有效内存吗?

谢谢。

解决方法

我知道,一旦退出While循环,Node * n就会被删除,因为n是在堆栈上分配的。但是通过设置head = n;即使在退出While循环后n所指向的内存仍然不应该在堆中,因此head仍然指向有效内存?

在将它们传递给函数时,指针就像变量一样。默认行为是复制指针。如果您实际上想更改传递给函数的参数,则需要通过引用来获取它:

void reverseList(Node* &head) {