In zslInsert() function: { ...... level = zslRandomLevel(); if (level > zsl->level) { for (i = zsl->level; i < level; i++) { rank[i] = 0; update[i] = zsl->header; update[i]->level[i].span = zsl->length; } zsl->level = level; } ...... }
I think whether it is better to only increase zsl->level by one: { ...... level = zslRandomLevel(); if (level > zsl->level) { level = zsl->level + 1; for (i = zsl->level; i < level; i++) { rank[i] = 0; update[i] = zsl->header; update[i]->level[i].span = zsl->length; } zsl->level = level; } ...... } For example: In a extreme case, if now the zsl->level is 3, but zslRandomLevel() returns 32 once, there is only one node between the 3 and 32 levels, and it is a big gap.
Comment From: enjoy-binbin
do you still have questions about this? putting aside the issue of probability, even if there is a high level, as far as i know, it should not have any impact.