搜索假设有一个有序链表如下:如果要找到24、43、59,依次遍历,需要比较的次数为2、4、6。目前搜索的时间复杂度为是O(N),如何提高搜索效率?很容易想到二分查找,将查找的时间复杂度降低到O(LogN)。具体来说,我们提取链表中的一些节点作为索引,类似于二叉搜索树,得到如下结构:这里我们把10、30、50、80提取为一级索引,这样二分查找可以用来减少搜索时的比较次数。我们也可以从一级索引中抽取一些元素作为二级索引,组成如下结构:比如要查找59,那么查找路径如下:查看一下定义链表:类ListNode{privateintval;接下来是私有ListNode;publicListNode(intval){this.val=val;这个.下一个=空;}}我们在每个节点的基础上添加一个向下指针,用于指向下一层节点classNode{privateintval;接下来是私有ListNode;私有ListNode关闭;publicListNode(intval){this.val=val;这个.下一个=空;this.down=null;出去。我们这里说的只是最简单的实现。比如Redis的跳表实现和我们说的不一样。当然思路是一样的,那么什么是跳表呢?简单来说,跳转表就是一个支持二分查找的有序链表。具体查找算法如下:/*如果x存在,则返回x所在的节点,否则返回x的后继节点*/privateNodefind(x){p=top;while(true){while(p.next.val
