[算法][面试]基于Python的跳表实现样例

核心API:

  1. __find_pre_node(target):找到某个值的前置点,查询时与插入相反,是从上往下走迭代的。
  2. insert(data):根据插入到前置点之后,随机晋升。晋升时要往前回溯到上一个可向上的节点,向上走并构建上下通道
  3. search(target) :基于__find_pre_node实现查询节点。
  4. remove(target) :删除节点,当节点有晋升时,要往上递归删除;当要删除的节点为当前层最后一个时,要移除层。
  5. __add_level()/__sub_level(level_head) :增加/减少层数,要注意node为最后一层时,不可把层数减为负。

一篇讲解: https://mp.weixin.qq.com/s/-1_jchMgIVeUdDhlTQCnnA,原文中的代码实现存在bug,配合下面的python代码理解更方便一些。


基本节点的数据结构:

class Node:
    def __init__(self, value):
        self.pre = self.next = None
        self.down = self.up = None
        self.v = value

跳表的python实现:

class SkipList:
    def __init__(self, promote_rate=0.5):
        self.max_level = 0
        self.head, self.tail = Node(-float('inf')), Node(float('inf'))
        self.promote_rate = promote_rate  # 随机晋升概率
        self.head.next, self.tail.pre = self.tail, self.head

    def 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值