跳过列表:插入

时间:2016-05-14 03:15:45

标签: data-structures linked-list skip-lists

我试图了解跳过列表如何用于插入,但是当我将其绘制出来时,它并没有成功。

|-inf<---------------------------->+inf|0
|-inf<--------->4<---------------->+inf|1
|-inf<--------->4<--->9<--->11<--->+inf|2
|-inf<--->1<--->4<--->9<--->11<--->+inf|3

所以我想在上面的链表中插入5。

从第0行开始:从-inf开始,将5与+ inf比较,移至下一行。

转到第1行:

是5 <= 4,没有。与右边的内容相比,+ inf。从元素4向下移动到第2行。

转到第2行:

现在我们在4到9之间移动,所以比较会是5 <= 4?不。是5 <= 9?是。插入4到9之间。

但现在5不会出现在第3行? 我做错了什么?

1 个答案:

答案 0 :(得分:0)

当你看到5 <= 9时,你必须继续向下直到你到达底部。可能有4到9之间的任何数字仍处于较低级别之一。当您在底行确定其位置时,将其插入那里,然后根据RNG的结果开始将其插入一行。插入的完整序列如下:

  1. 5&gt; + INF?不:向下移动。
  2. 5&gt; 4?是的:向右移动。
  3. 5&gt; + INF?不:向下移动。
  4. 5&gt; 9?不:向下移动。
  5. 5&gt; 9?不:向下移动。
  6. 无法在上一步中向下移动,因此请在底层插入4到9之间。
  7. 概率地将5添加到更高的行。