仅使用辅助队列和队列函数(没有堆栈或任何东西)逆转队列



我不明白。如果我们以:

开始

|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作为参数,您应该分别使用其实现的方法-addremove(给定的队列不是其他实现)。
  • 您无法实例化接口或抽象类!
  • 您没有在其他任何东西之前检查空的或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作为助手。

最新更新