为什么从链表中删除节点附带O(1)?

时间:2016-07-24 00:34:10

标签: algorithm

我正在读一本书,它说通过遍历的正常删除是O(n)。好的,这很简单。但后来它表示,如果你只是将数据从下一个节点复制到我们的节点,它将使它成为O(1)。

在Stackoverflow上我读了另一个解释,但我还是不明白。我们还不得不找到节点吗?

以下是节点,存储的数据位于括号中:

N("cop")->N("cat")->N("dog")->N("snake")->N("soldier")->N("camel")->N("ghost")->N("rock")

如何使用" soldier"删除节点(或从下一个节点移动数据)在O(1)完成? 怎么可能只指向它并说它是士兵节点?

2 个答案:

答案 0 :(得分:5)

通常谁在O(1)上谈论链接列表删除时假设你有一个指向节点本身的指针,而不仅仅是它的值,因此你不需要遍历列表。

答案 1 :(得分:3)

我认为你混淆了两件不同的事情:按内容搜索节点并删除节点。

您通过指针引用节点(您可以将其称为迭代器,句柄,链接......),您可以通过将其next链接及其数据设置为来自的节点来删除它。下一个节点 - 在O(1)中完成。

只有当你没有指向它时,你才会搜索它 - 这是O(n)。