[当尝试反转队列时,我找到了一种普遍同意的方式:
您可以使队列出队,获得出队值并将每个入栈。然后,您可以遍历该堆栈,弹出每个值并将其排队入队列中。
经同意,我的意思是我在Google进行的大部分反向搜索队列搜索最终都将我带到了该解决方案。
尽管这种方法是正确的,并且在线性时间中表现相对较好,但我相信还有一种更好的方法,可以在恒定时间内更简单,更高效。
假设队列是使用双链表实现的,难道仅通过反转头和尾指针]就可以在O(1)时间内反转它吗?] >>
当尝试反转队列时,我找到了一种普遍同意的方式:您可以使队列出队,获得出队值并将每个队列推入堆栈。然后,您可以通过...
如果您想将双向链表视为一个队列,那么只有按照惯例,它才是头,而尾是您要迭代的方式。但是队列的要点是它的接口...。因此,给定以未知方式实现的任意队列(有很多实现队列的东西,包括在许多计算机之间分布的队列),问题是,你怎么能逆转它,这意味着您不能依赖基础实现。
特定的实现可能会对某些操作进行优化。
不,您不能只交换双向链表的头和尾指针。您还需要交换每个节点中的下一个和上一个指针。这仍然需要O(n)时间。
队列是一个抽象的数据结构。这意味着不存在这种数据结构的物理存在。队列可以通过多种方式实现。最基本的实现是使用数组的实现。