You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// start for lowest level and delete the current node of each levelfor (int i = 0; i <= _skip_list_level; i++) {
// if at level i, next node is not target node, break the loop.if (update[i]->forward[i] != current)
break;
update[i]->forward[i] = current->forward[i];
}
可以改为
for (int i = current->node_level; i >= 0; --i) {
update[i]->forward[i] = current->forward[i];
}
因为从被删除节点的 node_level 可以得到它的层级,那么在 i<=node_level 的层级上,一定满足原来代码中的 update[i]->forward[i] == current 的条件。
师兄,这些是我个人见解,有不对的地方帮我指正出来吧
The text was updated successfully, but these errors were encountered:
// start for lowest level and delete the current node of each levelfor (int i = 0; i <= _skip_list_level; i++) {
// if at level i, next node is not target node, break the loop.if (update[i]->forward[i] != current)
break;
update[i]->forward[i] = current->forward[i];
}
可以改为
for (int i = current->node_level; i >= 0; --i) {
update[i]->forward[i] = current->forward[i];
}
因为从被删除节点的 node_level 可以得到它的层级,那么在 i<=node_level 的层级上,一定满足原来代码中的 update[i]->forward[i] == current 的条件。
如果 k 的初始值是1的话,那么插入的节点的 level 都是大于等于1的,那么在整个跳表中,第0层的索引和第1层的索引就完全一样没有区分度了。
2. skiplist.h 中的 delete_element() 中,只是把节点从指针链表中删除了,但实际的节点没有删除,会造成内存泄漏
可以改为
因为从被删除节点的 node_level 可以得到它的层级,那么在 i<=node_level 的层级上,一定满足原来代码中的
update[i]->forward[i] == current
的条件。师兄,这些是我个人见解,有不对的地方帮我指正出来吧
The text was updated successfully, but these errors were encountered: