我不明白这一点。如果我们开始:
| a | b | c | d |
用它来反转它,我得到:
| b | c | d | a |
它似乎只是颠倒了第一个字母,有人可以按行分解,所以我可以看到我迷茫的地方。谢谢!
Q
是我们想要使用帮助程序队列反转的队列。
public static void reverseQueue(Queue Q)
{
Queue q = new Queue(); //helper queue
while (!Q.isEmpty())
{
for(int i = 1; i <= Q.size()-1; i++) //move last element to the first
Q.enqueue(Q.dequeue());
q.enqueue(Q.dequeue()); //move it to q
}
while(!q.isEmpty())
Q.enqueue(q.dequeue());
}
你的方法很好,但有一些非常重要的流程:
Queue
作为您的参数,您应该分别使用其实现的方法 - add
和remove
(给定Queue不是其他实现)。以下是线性时间:
public static void reverseQueue(Queue<Object> q) {
if (q.isEmpty() || q.size() == 1)
return; //nothing happens here
int s = q.size();
Object[] helper = new Object[s];
for (int i = 0; i < s; i++)
helper[s - 1 - i] = q.remove();
for (int i = 0; i < s; i++)
q.add(helper[i]);
}
如果你坚持使用队列 - 删除你的代码,但不是试图实例化一个接口,而是使用一些实现类,例如LinkedList作为帮助者。