如何解决反转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* n
,reverseNode
就会被删除,因为n,m
被分配在堆栈上。但是通过设置head=n;
,即使退出功能后,n
指向的内存也不应该仍然在堆中,因此head
仍然指向有效内存吗?
谢谢。
解决方法
我知道,一旦退出While循环,Node * n就会被删除,因为n是在堆栈上分配的。但是通过设置head = n;即使在退出While循环后n所指向的内存仍然不应该在堆中,因此head仍然指向有效内存?
在将它们传递给函数时,指针就像变量一样。默认行为是复制指针。如果您实际上想更改传递给函数的参数,则需要通过引用来获取它:
void reverseList(Node* &head) {
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。