女孩和机器人一起思考

一起动脑筋 · 先看一个小故事

女孩把寻宝线索分散放在几个盒子里,每个盒子还写着下一盒在哪里。

把过程摊开来看

沿着编号看一遍,再用自己的话讲一遍
  1. 节点 A数据与下一站 B
  2. 节点 B数据与下一站 C
  3. 节点 C标记到此结束

链表节点保存数据和连接信息。

节点不必在内存中挨着;沿着连接才能依次找到后面的节点。插入时可以调整连接,让新节点加入。

01数组一定要连续,数据还能怎么组织?

可以让每个数据自己记住“下一个数据在哪里”。

这就是链表的核心思想。

02什么是节点?

节点(Node)通常包含两类信息:

数据

例如 10

连接

指向下一个节点

03单链表长什么样?

102030null

最后一个节点没有下一个节点,因此连接为空。

04链表节点一定挨在一起吗?

不一定。

和普通数组不同,链表节点可以位于不同内存位置,只要连接信息能够找到下一个节点。

05怎样找到第 3 个节点?

单链表通常要从头节点开始:

第 1 个第 2 个第 3 个

不能像数组那样直接写“首地址 + 下标偏移”就跳到目标节点。

06链表为什么适合插入和删除连接?

如果已经找到了相关节点,插入或删除常常只需要修改少量连接。

但要注意:找到插入位置本身可能仍然需要遍历。

07链表一定比数组好吗?

数组

随机访问方便,连续存储,对缓存通常更友好。

链表

连接灵活,但节点有额外连接信息,遍历局部性通常较差。

你已经知道了什么

  • 链表由节点和节点间的连接组成。
  • 单链表节点通常指向下一个节点。
  • 链表节点不需要连续存储。
  • 按位置访问通常需要从前向后遍历。
  • 修改连接和寻找位置是两个不同成本。

下一篇:什么是树?

轮到你来试一试

只知道第一个节点,要直接跳到第 100 个,通常能像数组下标那样定位吗?

想好了吗?点开看解释

不能,普通链表通常要跟着连接依次走到那里。