问题描述
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* n
,reverseNode
就会被删除,因为n,m
被分配在堆栈上。但是通过设置head=n;
,即使退出功能后,n
指向的内存也不应该仍然在堆中,因此head
仍然指向有效内存吗?
谢谢。
解决方法
我知道,一旦退出While循环,Node * n就会被删除,因为n是在堆栈上分配的。但是通过设置head = n;即使在退出While循环后n所指向的内存仍然不应该在堆中,因此head仍然指向有效内存?
在将它们传递给函数时,指针就像变量一样。默认行为是复制指针。如果您实际上想更改传递给函数的参数,则需要通过引用来获取它:
void reverseList(Node* &head) {