概念:链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表
中的指针链接次序实现的 。
链表的结构跟⽕⻋⻋厢相似,淡季时⻋次的⻋厢会相应减少,旺季时⻋次的⻋厢会额外增加⼏节。只需要将⽕⻋⾥的某节⻋厢去掉/加上,不会影响其他⻋厢,每节⻋厢都是独⽴存在的。⻋厢是独⽴存在的,且每节⻋厢都有⻋⻔。想象⼀下这样的场景,假设每节⻋厢的⻋⻔都是锁上的状
态,需要不同的钥匙才能解锁,每次只能携带⼀把钥匙的情况下如何从⻋头⾛到⻋尾?
最简单的做法:每节⻋厢⾥都放⼀把下⼀节⻋厢的钥匙。
在链表⾥,每节“⻋厢”是什么样的呢?
链表⾥的每节"⻋厢"都是独⽴申请下来的空间,我们称之为“结点/节点”。
节点的组成主要有两个部分:当前节点要保存的数据和保存下⼀个节点的地址(指针变量)。
创建这样一个结构体
1.创建结点以及打印函数
2.头插法创建链表
相比与尾插法,头插法更优。因为尾插法在一个结点也没有时需要用二级指针来改变头指针的值,其他情况只需要一级指针即可,需要分两种情况。而头插法一直需要用二级指针来改变头指针的值,只有这一种情况。
3.尾插法创建链表
4.头删函数
头删和尾删都需要考虑三种情况:1.没有结点,这时不需要删 2.只有一个结点,删除后需要改变头指针的值,将其置为NULL 3.有多个结点
5.尾删函数
6.找结点位置函数
7.特定位置前插函数
8.特定位置后插函数
特定位置后插更简洁
9.特定位置删除函数
10.销毁链表函数
总结:由上述可知,改变链表结构的函数都需要穿二级指针,因为可能改变头指针的值。