我正在读一本书,它说通过遍历的正常删除是O(n)。好的,这很简单。但后来它表示,如果你只是将数据从下一个节点复制到我们的节点,它将使它成为O(1)。
在Stackoverflow上我读了另一个解释,但我还是不明白。我们还不得不找到节点吗?
以下是节点,存储的数据位于括号中:
N("cop")->N("cat")->N("dog")->N("snake")->N("soldier")->N("camel")->N("ghost")->N("rock")
如何使用" soldier"删除节点(或从下一个节点移动数据)在O(1)完成? 怎么可能只指向它并说它是士兵节点?
答案 0 :(得分:5)
通常谁在O(1)
上谈论链接列表删除时假设你有一个指向节点本身的指针,而不仅仅是它的值,因此你不需要遍历列表。
答案 1 :(得分:3)
我认为你混淆了两件不同的事情:按内容搜索节点并删除节点。
您通过指针引用节点(您可以将其称为迭代器,句柄,链接......),您可以通过将其next
链接及其数据设置为来自的节点来删除它。下一个节点 - 在O(1)中完成。
只有当你没有指向它时,你才会搜索它 - 这是O(n)。