【问题标题】:LinkedList Stack Structure Big OLinkedList 堆栈结构 Big O
【发布时间】:2020-02-05 16:53:00
【问题描述】:

以下问题的答案是 O(n) 用于弹出,O(1) 用于推送。但我不太明白为什么 pop 不能是 O(1)。我们确实有指向链表末尾的尾指针,我们应该在 O(1) 时间内访问它,对吧?我错过了什么吗?

如果堆栈的底部必须位于链接内存结构的头部,pushpop 操作的运行时间是多少?其中 n 是结构中的节点数。

【问题讨论】:

    标签: linked-list stack big-o singly-linked-list


    【解决方案1】:

    想想堆栈的不变量:tail 指向最后一个元素。

    pop 操作删除了最后一个元素——这意味着我们需要重新调整tail。我们如何做到这一点?对于双向链表,我们可以只跟随指针回到前一个节点 - 但正如您的插图清楚地显示的那样,在单链表中没有这样的箭头返回到前一个节点。

    所以我们需要从head(我们持有指针的唯一另一个节点)开始,一直迭代直到我们到达倒数第二个节点,然后将tail设置为指向那个节点。

    【讨论】:

    • 谢谢!我忘记了要重置的尾巴。
    猜你喜欢
    • 2015-11-15
    • 2018-04-27
    • 2014-10-14
    • 2021-12-12
    • 1970-01-01
    • 2013-10-20
    • 2011-01-03
    • 2011-06-12
    • 1970-01-01
    相关资源
    最近更新 更多