正如维基百科文章所说,我不太明白为什么在单个链表末尾删除会在 O(1) 时间内进行。
单个链表由节点组成。一个节点包含某种数据,以及对下一个节点的引用。链表中最后一个节点的引用为空。
-------------- -------------- --------------
| data | ref | -> | data | ref | -> ... -> | data | ref |
-------------- -------------- --------------
我可以删除 O(1) 中的最后一个节点。但在这种情况下,您不会将新的最后一个节点(前一个节点)的引用设置为 null,因为它仍然包含对已删除的最后一个节点的引用。所以我想知道,他们在运行时间分析中是否忽略了这一点?还是认为您不必更改它,因为引用只是指向任何内容,而这被视为空值?
因为如果不忽略它,我会认为删除是 O(n)。由于您必须遍历整个列表才能到达新的最后一个节点并将其引用也设置为 null。只有在双链表中它才真正是 O(1)。
-edit- 也许这种观点给出了一些更清晰的信息。但我将“删除节点”视为成功删除节点本身并将先前的引用设置为空。