1. ListNode线性链表定义
struct ListNode{
int val;
ListNode *next;
ListNode() : val(0),next(NULL){}
ListNode(int x) : val(x), next(NULL){}
ListNode(int x, ListNode *next) : val(x), next(next){}
};
2.ListNode线性链表使用方法(在main中测试)
c++中使用new定义的变量和不使用new定义的变量
假设有一个类CTest,现定义两个CTest的对象
CTest t1;
CTest *t2 = new CTest();
1.本质不同
t1为类对象。
t2为类对象的指针。
2.作用域不同
t1作用域限制在定义类对象的方法中,当方法结束时,类对象也会被系统释放,不需要手工释放,安全不会造内存泄露。
t2作用域为全局,当程序结束时,需要使用delete进行手工释放,系统不会自动释放,如果忘记释放,容易造成内存泄露
3.内存中存放地址不同
t1存放在堆中。
t2存放在栈中。
//边定义边赋值,new一个新的节点
ListNode *l3 = new ListNode(12);
cout << l3->val << endl;
delete(l3);
//在既定范围内定义一个节点
ListNode vHead(3);
ListNode p = vHead; //将当前地址赋值给p,使得p指向当前节点
cout << vHead.val << endl;
cout << p.val <<endl;
//定义一个节点时,默认赋值,使用ListNode():val(0),next(NULL){}
ListNode *vHead2 = new ListNode();
cout << vHead2->val << endl;
//定义一个节点时,默认赋值,使用ListNode():val(0),next(NULL){}
ListNode vHead2;
cout << vHead2.val << endl;
创建一个长链表:
ListNode *L = new ListNode();
ListNode *l1 = new ListNode(2);
ListNode *l2 = new ListNode(3);
ListNode *l3 = new ListNode(4);
L->next = l1;
l1->next = l2;
l2->next = l3;
ListNode *p = L->next;
while(p != NULL){
cout << p->val << endl;
p = p->next;
}
3.leetcode题目