对链表改造一波,能够支持相似“二分”的查找算法,改形成跳表。
快速的插入删除查找,有些时候能够替代红黑树。
核心思想是对链表创建一层索引(好比隔两个结点提取一个结点到上一级),减小遍历节点的数目。
进阶思想是再加一层索引。
链表加多级索引的结构,就是跳表。
个人感受思想比较接近向上生长的二叉树。算法
跳表查询的时间复杂度就是O (logn) ,空间换时间。每一层最多遍历m个结点,m数量跟索引规则有关。(隔一个结点取索引的话,m就是3)
虽然占用空间有点多,空间复杂度为O (n) ,可是实际开发中,原始链表的存储可能很大,而索引仅仅是存储关键值和几个指针。新占用的空间和原始数据相比能够忽略。函数
复杂度也是O (logn) ,仅仅是定位到插入的位置须要复杂度,单个的插入操做的时间复杂度是O(1)。指针
经常插入和删除以后,须要动态更新索引,要否则会退化成为单链表。索引
往跳表中插入数据的时候,能够选择同时将这个数据插入到部分索引层中,经过一个随机函数,决定将这个节点插入到哪几级索引中。好比生成K,则将此结点一次添加到第一级到第K级这K级索引中。开发