我对哪个选项是正确的以及为什么感到困惑。所以这里是问题:
从单个链接列表中的最后一个位置删除节点的最佳运行时间是什么。
我的想法:
我认为b中的解决方案?因为,我知道当你删除链表的最后一个元素时,它是O(n),因为你必须遍历链表的所有元素。
将元素推送到双向链表中实现的堆栈的最坏情况是什么时候?
我的想法:
我认为解决方案是d,因为在链表中插入元素的大哦是O(n),其中n是要插入的元素数。
我真的对这个话题很困惑,如果有人可以修改我的解决方案并理解他们的解决方案为什么是正确的,那么我会很感激。感谢。
答案 0 :(得分:0)
首先你是对的。为了删除最后一个元素,你需要遍历列表并修改指针,使其为Ω(n)。
在第二个中,它是O(1)。堆栈是LIFO。你有一个指向堆栈头部的指针。您需要做的就是为新元素创建一个节点,使其成为当前头部的下一个,并将头部设置为新创建的元素。因此,操作的数量不是堆栈大小的函数。它可以在恒定时间内完成,即O(1)。
编辑:上面的答案假定数据结构没有用某些数组实现实现,由于调整大小,可能再次为O(n)。