我不太明白为什么单向链表在末尾删除时可以在O(1)时间内完成,正如维基百科文章所说。
一个单向链表由节点组成。每个节点包含某种数据和对下一个节点的引用。连接列表中最后一个节点的引用为null。
-------------- -------------- --------------
| data | ref | -> | data | ref | -> ... -> | data | ref |
-------------- -------------- --------------
我可以在O(1)的时间内删除最后一个节点。但是这种情况下,由于先前的节点仍然包含对已删除的最后一个节点的引用,因此您不会将新的最后一个节点的引用设置为null。所以我想知道,在运行时间分析中他们是否忽略了这一点?或者说您不必更改它,因为该引用指向了空,这被视为null?
因为如果不忽略这一点,我认为删除的时间复杂度是O(n)。因为您必须遍历整个列表才能到达新的最后一个节点并将其引用设置为null。只有在双向链表中,删除才真正是O(1)的。
-编辑-
也许这个观点可以更清楚地说明问题。但是我认为“删除一个节点”应该成功删除节点本身并将前一个引用设置为null。