Data structures 从O(1)中的双链接列表中删除

Data structures 从O(1)中的双链接列表中删除,data-structures,linked-list,time-complexity,Data Structures,Linked List,Time Complexity,我知道从双链接列表中删除一个元素的时间复杂度是O(1),这似乎是显而易见的,但是如果我们没有收到一个元素来删除它,而是收到一个被该元素包装的元素,会发生什么呢 例如,如果我们定义一个类元素来包装一个字符串(提供指向下一个和上一个元素的指针),如果方法接收到该元素作为输入而不是字符串,我们可以在O(1)中进行删除 如果remove方法接收到字符串,它必须在列表中搜索以找到相应的元素,对吗?因此,在这种情况下,时间复杂度将是O(n),不再是O(1) 你完全正确 删除被认为是O(1)(当您执行Remo

我知道从双链接列表中删除一个元素的时间复杂度是O(1),这似乎是显而易见的,但是如果我们没有收到一个元素来删除它,而是收到一个被该元素包装的元素,会发生什么呢

例如,如果我们定义一个类元素来包装一个字符串(提供指向下一个和上一个元素的指针),如果方法接收到该元素作为输入而不是字符串,我们可以在O(1)中进行删除

如果remove方法接收到字符串,它必须在列表中搜索以找到相应的元素,对吗?因此,在这种情况下,时间复杂度将是O(n),不再是O(1)

你完全正确

删除被认为是
O(1)
(当您执行
Remove(Element)
)时),但通常这与查找操作(即
Remove(String)
Remove(find(String))
)一起进行,即
O(n)
您完全正确


删除被认为是
O(1)
(当您执行
Remove(Element)
)时),但通常这与查找操作一起进行(即
Remove(String)
Remove(find(String))
),即
O(n)
此链表()使用一个非常可疑的方法,将属性插入到要添加到列表的对象中。它会在不搜索对象的情况下删除O(1),但如果将基本类型添加到列表中(添加属性时它们会被装箱),则会有属性名称冲突和性能损失的风险。

此链接列表()使用一种非常可疑的方法,将属性插入要添加到列表中的对象中。它会在不搜索对象的情况下删除O(1),但如果您将基元类型添加到列表中(添加属性时它们会被装箱),则会有属性名称冲突和性能损失的风险。

这里面有什么问题吗?看起来好像你提供了所有的答案…我以为我错了!所以在实际的实现中,它不是O(1),因为它总是说它是。但确切的措辞很重要。移除(节点)是不变的。当然,搜索是线性时间。这就是为什么侵入式链表(项目和列表节点是统一的)与它们一样有用的原因。@ArianHosseinzadeh-从双链接列表中删除节点总是O(1),只要您有要删除的节点。在本例中,算法首先需要找到节点。找到匹配的节点是O(n)。删除节点仍然是O(1)。也许不是正确的方法,但我发现如果使用字典而不是列表,效果会更好。这里面有什么问题吗?看起来好像你提供了所有的答案…我以为我错了!所以在实际的实现中,它不是O(1),因为它总是说它是。但确切的措辞很重要。移除(节点)是不变的。当然,搜索是线性时间。这就是为什么侵入式链表(项目和列表节点是统一的)与它们一样有用的原因。@ArianHosseinzadeh-从双链接列表中删除节点总是O(1),只要您有要删除的节点。在本例中,算法首先需要找到节点。找到匹配的节点是O(n)。删除节点仍然是O(1)。也许不是正确的方法,但我发现如果使用字典而不是列表,效果会更好。
  class Element{
    String content;
    Element next;
    Element previous;
  }

  class LinkedList{
    ...
    public remove(String s){
        //it has to first find the element corresponding to this String !
    }
  }