我不明白。如果我们以:
开始|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());
}
您的方法是 okeish ,但是,有一些很大的主要流程:
- 要遵守超级接口
Queue
作为参数,您应该分别使用其实现的方法-add
和remove
(给定的队列不是其他实现)。 - 您无法实例化接口或抽象类!
- 您没有在其他任何东西之前检查空的或1尺寸的队列。
- 如果您不只使用队列,请寻找更强大的结构作为助手。
- Java中的参数应从小型字母开始。
-
Java始终是0-索引一个应该更好地保留。
以线性时间进行以下内容:
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作为助手。