Java 仅使用助手队列和队列函数反转队列(无堆栈或任何内容)

Java 仅使用助手队列和队列函数反转队列(无堆栈或任何内容),java,interface,queue,reverse,Java,Interface,Queue,Reverse,我不明白。如果我们从以下方面开始: |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

我不明白。如果我们从以下方面开始:

|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());
}
publicstaticvoidreversequeue(队列Q)
{
队列q=新队列();//帮助器队列
而(!Q.isEmpty())
{
对于(int i=1;i您的方法是okayish,但有一些非常重要的流程:

  • 为了遵守超级接口
    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]);
    }
publicstaticvoidreversequeue(队列q){
if(q.isEmpty()| | q.size()==1)
return;//这里什么也没有发生
int s=q.size();
Object[]helper=新对象[s];
对于(int i=0;i

如果您坚持使用队列-删除您的代码,但不要尝试实例化接口,而是使用一些实现类(例如LinkedList)作为帮助程序。

我对这个问题投了否决票,因为没有证据表明对此代码执行了任何调试。请您的问题向我们展示您的调试发现了什么,以及关于特定代码行的特定问题。请参阅:和。