
一起动脑筋 · 先看一个小故事
女孩把寻宝线索分散放在几个盒子里,每个盒子还写着下一盒在哪里。
把过程摊开来看
- 节点 A数据与下一站 B
- 节点 B数据与下一站 C
- 节点 C标记到此结束
链表节点保存数据和连接信息。
节点不必在内存中挨着;沿着连接才能依次找到后面的节点。插入时可以调整连接,让新节点加入。
01数组一定要连续,数据还能怎么组织?
可以让每个数据自己记住“下一个数据在哪里”。
这就是链表的核心思想。
02什么是节点?
节点(Node)通常包含两类信息:
数据
例如 10
连接
指向下一个节点
03单链表长什么样?
10→20→30→null
最后一个节点没有下一个节点,因此连接为空。
04链表节点一定挨在一起吗?
不一定。
和普通数组不同,链表节点可以位于不同内存位置,只要连接信息能够找到下一个节点。
05怎样找到第 3 个节点?
单链表通常要从头节点开始:
第 1 个→第 2 个→第 3 个
不能像数组那样直接写“首地址 + 下标偏移”就跳到目标节点。
06链表为什么适合插入和删除连接?
如果已经找到了相关节点,插入或删除常常只需要修改少量连接。
但要注意:找到插入位置本身可能仍然需要遍历。
07链表一定比数组好吗?
数组
随机访问方便,连续存储,对缓存通常更友好。
链表
连接灵活,但节点有额外连接信息,遍历局部性通常较差。
你已经知道了什么
- 链表由节点和节点间的连接组成。
- 单链表节点通常指向下一个节点。
- 链表节点不需要连续存储。
- 按位置访问通常需要从前向后遍历。
- 修改连接和寻找位置是两个不同成本。
下一篇:什么是树?
轮到你来试一试
只知道第一个节点,要直接跳到第 100 个,通常能像数组下标那样定位吗?
想好了吗?点开看解释
不能,普通链表通常要跟着连接依次走到那里。