能否仅通过反转队列的头部和尾部指针来反转队列?

问题描述 投票:0回答:3

[当尝试反转队列时,我找到了一种普遍同意的方式:

您可以使队列出队,获得出队值并将每个入栈。然后,您可以遍历该堆栈,弹出每个值并将其排队入队列中。

经同意,我的意思是我在Google进行的大部分反向搜索队列搜索最终都将我带到了该解决方案。

尽管这种方法是正确的,并且在线性时间中表现相对较好,但我相信还有一种更好的方法,可以在恒定时间内更简单,更高效。

假设队列是使用双链表实现的,难道仅通过反转头和尾指针]就可以在O(1)时间内反转它吗?] >>

当尝试反转队列时,我找到了一种普遍同意的方式:您可以使队列出队,获得出队值并将每个队列推入堆栈。然后,您可以通过...

data-structures queue big-o theory
3个回答
2
投票

如果您想将双向链表视为一个队列,那么只有按照惯例,它才是头,而尾是您要迭代的方式。但是队列的要点是它的接口...。因此,给定以未知方式实现的任意队列(有很多实现队列的东西,包括在许多计算机之间分布的队列),问题是,你怎么能逆转它,这意味着您不能依赖基础实现。

特定的实现可能会对某些操作进行优化。


0
投票

不,您不能只交换双向链表的头和尾指针。您还需要交换每个节点中的下一个和上一个指针。这仍然需要O(n)时间。


0
投票

队列是一个抽象的数据结构。这意味着不存在这种数据结构的物理存在。队列可以通过多种方式实现。最基本的实现是使用数组的实现。

© www.soinside.com 2019 - 2024. All rights reserved.