我不明白这一点。如果我们从:
开始| 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());
}
答案 0 :(得分:0)
你的方法 okayish ,但是,有一些非常重要的流程:
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作为帮助者。