【问题标题】:Easiest node to remove from a LinkedList最容易从 LinkedList 中删除的节点
【发布时间】:2017-11-05 22:04:16
【问题描述】:

我想知道是否有任何类似最简单的节点可以从 LinkedList 中删除或删除。

我知道从中间删除一个节点需要更改前面的节点链接,而从开头删除需要更改指向新头的指针,从末尾删除需要更改列表的新结尾。

但是,如果要求从 LinkedList 中删除一个更容易的节点,应该首选哪一个?

【问题讨论】:

  • 如果您需要删除的节点是第一个节点,这可能比中间节点更容易。但肯定有要删除的特定节点,而不是首选节点。
  • 第一个节点是否也比最后一个节点更容易,或者它们是否具有相同的复杂性?
  • 在所有情况下,它都涉及更改指向要删除节点的指针。所以:你需要访问它。
  • 我从来没有遇到过删除最容易要删除的数据而不是实际要删除的数据的问题。
  • “最简单”的节点可能有很多含义。一个简单的方法是最简单的应该是最快的。结构的头部具有 O(1) 的复杂度。如果您的结构有一个指向列表末尾的点,那么删除第一个需要与最后一个相同的时间。如果你只有一个指向头部的指针,那么最快的就是头部。

标签: c data-structures linked-list


【解决方案1】:

听起来您对链表的想法是正确的。关于从链表中删除 最简单 节点需要考虑的另一件事是:

这些最简单的节点多久会被删除一次?如果节点从列表的 head 中删除,则删除将在 O(1) 时间内完成,但如果 最简单 节点是在列表的后部,移除将需要完整遍历列表在 O(n) 时间内完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-02
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 2013-11-24
    相关资源
    最近更新 更多