仅使用帮助程序队列和队列函数反转队列(没有堆栈或任何东西)

问题描述 投票:-3回答: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());
}
java interface queue reverse
1个回答
0
投票

你的方法很好,但有一些非常重要的流程:

  • 要符合超级接口Queue作为您的参数,您应该分别使用其实现的方法 - addremove(给定Queue不是其他实现)。
  • 你无法实例化Interface或抽象类!
  • 在其他任何事情之前,您不会检查空的或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作为帮助者。

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