插入很容易;通知包含目标索引和指向该项的指针。更新也很容易;我传递一个指向该项的指针。
删除似乎很简单;我需要传递要删除的项的索引,但是如何知道索引呢?索引从零开始并且必须连续,但是我在插入时随意制定它们。因此,我需要跟踪为每个项目制定的索引。
例如,我可以使用映射:std::map,但是当我删除一个项时,我必须重新编号其后面的所有内容,这是O(N)的操作。
这些项目列表将变得非常大,以至于O(N)迭代不可接受。我确定这个问题已经解决了,只是我不知道这个解决方案应该称为什么。搜索任何与“linked list”相关的内容都会产生大量噪音。
一种可能的解决方案是跳表,其中子列表中的每个节点都知道它跳过主列表中的多少个节点,由于搜索跳表的时间复杂度为O(logN),因此我们可以在进行搜索时进行跟踪,并在O(logN)中找到索引,也可以在O(logN)中删除项目。
但是,在这里实现跳表似乎有些杀鸡焉用牛刀...是否有更简单的解决方案?
编辑:
感谢大家的建议,但我认为我已经说服自己使用跳表是解决这个问题的正确方法。