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题目

 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐