跳表 Skip List

一种高效的链表数据结构,支持 O(log n) 的查找、插入和删除

L4 层 (顶层)
L3 层
L2 层
L1 层
底层链表
当前搜索节点
数据结构可视化
点击按钮开始操作
工作原理

🔍 多层索引

跳表在底层链表之上建立了多层索引。顶层节点可以快速跳过大量元素,就像在图书馆的分类目录中快速定位。

🎲 随机化

新节点随机决定提升到哪一层(抛硬币决定)。平均每 2 个节点有 1 个在 L1,每 4 个有 1 个在 L2,以此类推。

⚡ O(log n) 查找

从顶层开始,向右找到比目标大的最近节点,然后下降到下一层。重复直到最底层,平均只需 log n 步。

🔄 动态平衡

不像红黑树需要旋转维护平衡,跳表通过概率分布自然保持平衡。插入和删除只需局部修改指针。

复杂度对比
操作 数组 普通链表 跳表 红黑树
查找 O(log n) O(n) O(log n) O(log n)
插入 O(n) O(1)* O(log n) O(log n)
删除 O(n) O(1)* O(log n) O(log n)
范围查询 O(log n + k) O(n) O(log n + k) O(log n + k)
实现难度 简单 非常简单 简单 复杂

* 需先 O(n) 找到位置后才能插入/删除

搜索过程详解
跳表搜索示例:查找值 42 1. 从 HEAD 的顶层 (L4) 开始 2. 向右移动,直到下一个节点值 > 42 3. 下降到 L3,重复上述过程 4. 继续下降到 L2, L1 5. 最后在底层链表找到目标或确认不存在 每下降一层,搜索范围缩小一半!