我有一个双链表,需要快速插入和删除。我可以在任一方向上横向移动整个东西以找到插入或移除的位置,但是有没有更聪明的方法来找到插入或移除点?首先想到的是二叉搜索,但由于它是一个没有索引(不是数组)的链表,我不确定如何在我的链表上跳转。
在这里,什么是使插入和移除速度最快的正确方法?
聪明的方法是转向跳过列表。
其他方法包括缓存最近的访问,并智能猜测从哪里开始搜索,在最后,在开始或最近的位置。
您可以使用
B树代替双链表,或者如其他答案中所述,使用Skip_list。对于快速搜索,双链表是错误的数据结构。
正如您自己指出的那样,由于链表不可索引,因此除了遍历列表以找到正确的插入点之外,别无他法......