散列表双链表处理冲突删除操作O(1)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37762819/article/details/78206381

这两天在看算法导论散列表的时候,遇到一个问题,为何采用双链表处理冲突的删除操作只需O(1),后来发现删除操作的输入是x,而不是k,x是指向一片内存区域的指针,这片内存区域用来存放k以及相关信息。
对于单链表,比如现在我们要删除k2,对应的指针暂定为x2,假设其前驱k1,对于指针x1,删除k2时,其实我们现在知道的信息也就是x1->next = x2,但是我们没有x1,所以我们无法改变x1->next,只是知道它等于x2而已,所以单链表必须得从头来,跟查找操作一个意思了就(查找操作的输入是k,不是x),所以为了删除方便,还是用双链表比较好,就比如上例,通过x2,可以找到x1和后继(假设是x3),只需改变x1和x3的相应的指针域即可。这大概就是我的理解,所以在此记录一下。

阅读更多
换一批

没有更多推荐了,返回首页