C++ ListNode 结构体对象创建方法详解
C++ ListNode 结构体是一个常用的数据结构,用于构建链表。它的定义如下:
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
创建 ListNode 对象
可以使用以下代码新建一个 ListNode 对象:
ListNode *newNode = new ListNode(5); // 创建一个值为5的ListNode对象,并将其分配到堆上
// 或者
ListNode newNode(5); // 创建一个值为5的ListNode对象,并将其分配到堆栈上
区别:
- 堆分配:使用
new关键字在堆上分配内存,需要手动释放内存,否则会造成内存泄漏。 - 栈分配:在函数内部声明对象,系统自动在栈上分配内存,当超出作用域时对象会自动被销毁。
建议:
- 如果需要在多个函数中使用对象,或者对象生命周期较长,建议使用堆分配。
- 如果只需要在当前函数中使用对象,或者对象生命周期较短,建议使用栈分配。
注意:
- 使用堆分配时,需要使用
delete关键字释放内存。 - 使用栈分配时,不需要手动释放内存,系统会自动进行内存回收。
示例
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
int main() {
// 堆分配
ListNode *head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
// 遍历链表
ListNode *current = head;
while (current != NULL) {
cout << current->val << ' ';
current = current->next;
}
cout << endl;
// 释放内存
delete head->next->next;
delete head->next;
delete head;
// 栈分配
ListNode node1(4);
ListNode node2(5);
node1.next = &node2;
// 遍历链表
current = &node1;
while (current != NULL) {
cout << current->val << ' ';
current = current->next;
}
cout << endl;
return 0;
}
输出:
1 2 3
4 5
原文地址: https://www.cveoy.top/t/topic/mlaK 著作权归作者所有。请勿转载和采集!