链表基础【C++实现】

平台:Visual Studio 2022

编程工具:C++

目录:

1、链表的结构体实现

2、链表的声明、开辟空间

3、链表的初始化

4、链表的连接

5、链表输出

6、完整代码实例

 

链表基础【C++实现】_第1张图片

1、链表的结构体实现

链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:

  •  一个是存储数据元素的数据域(上图中黄色区域)
  • 另一个是存储下一个结点地址的指针域。 (上图中蓝色区域)
struct ListNode {
	int val;
	ListNode* next;
};

上面就是链表的结构体定义,可以看出结构体内有两个成员变量,val 是链表的数据部分,*next 是一个指针,代表链表指向下一个节点的引导部分。

2、链表的声明、开辟空间

链表的声明本质上其实是对结构体进行声明,比较特殊的一点是数据空间不能开辟到栈区内,只能开辟到堆区(也就是 new 一个)

(这里具体原理我也不知道为什么,我查的说是在栈区开辟空间以后地址不会更新,如果有大神知道为什么可以在评论区指教一下,谢谢)

//第一种声明方式
ListNode* head01;
head01 = new ListNode;

//第二种声明方式
ListNode* head2 = new ListNode;

有两种方式,第一种方式是先声明一个结构体指针对象,再开辟空间;第二种方式是在声明对象的同时就开辟空间了,(这里一定要用 new,把数据安排到堆区)

3、链表的初始化

head01->val = 10;
head01->next = nullptr;

head02->val = 20;
head02->next = nullptr;

//注意:
//    链表不赋初值的时候也会随机给分配一个值
//    判断的时候不能用 if(head->val == NULL),用 if(head == nullptr)

ListNode* head = new ListNode; //只声明分配地址空间,并没有初始化
cout << head->val << endl;  //这里输出一个随机值(有值)

由上一节可知,head01 是一个指针的数据类型,所以它可以指向两个结构体的成员变量。

首先我们使用 head01->val 初始化当前节点的数据内容;然后我们使用 head01->next 指向下一个节点,由于目前没有连接下一个节点,所以我们指向空(在 C++ 中使用 nullptr 代表空指针,NULL 代表空值)

注意:如果只声明且分配空间以后,没有初始化,val里面也是会有一个随机值的

4、链表的连接

head01->next = head02;

一行代码,把 head02 赋值给 head01 指向下一个的指针 next 。

5、链表输出

cout << head01->val << endl;
cout << head01->next->val << endl;  //重点

在链表中,val 的部分通常是我们需要的值,所以我们可以通过 head01->val 查看当前节点的值,也可以通过 head01->next->val 查看下一个连接节点的值


6、完整代码示例

#include 
using namespace std;

//定义链表结构体
struct ListNode {
	int val;
	ListNode* next;
};

void test01() {
	ListNode* head01;
	head01 = new ListNode;
	head01->val = 10;
	head01->next = nullptr;  //指针型,必须是nullptr

	ListNode* head02;
	head02 = new ListNode;
	head02->val = 20;
	head02->next = nullptr;
	head01->next = head02;  //把两个表链接起来

	//输出
	cout << head01->val << endl;
	cout << head01->next->val << endl;  //重点
}

void test02() {
	ListNode* head = new ListNode;
	cout << head->val << endl;
	// 链表不赋初值也会随机分配一个值,
	// 判断的时候不能用if(head->val == NULL),用if(head == nullptr)
}


int main() {
	test01();
    test02();
	system("pause");
	return 0;
}

你可能感兴趣的:(C++,链表,c++,数据结构)