方法1:只用一个队列
出栈直接出队,但是入栈前先直接入队,然后出队n-1个元素并入队,这样刚进队的元素就在队头了。
上代码:
class MyStack {
private Queue<Integer> queue=new LinkedList<>();
/** Initialize your data structure here. */
public MyStack() {
}
/** Push element x onto stack. */
public void push(int x) {
queue.add(x);
for(int i=1;i<queue.size();i++){
queue.add(queue.poll());
}
}
/** Removes the element on top of the stack and returns that element. */
public int pop() {
return queue.poll();
}
/** Get the top element. */
public int top() {
return queue.peek();
}
/** Returns whether the stack is empty. */
public boolean empty() {
return queue.isEmpty();
}
}
方法二:采用两个队helpQ和pollQ
入栈时先将pollQ的元素出队并存入helpQ中,然后新元素进pollQ,再将helpQ中的所有元素出队依次进pollQ
代码:
class MyStack {
private Queue<Integer> pollQ=new LinkedList<>();
private Queue<Integer> helpQ=new LinkedList<>();
/** Initialize your data structure here. */
public MyStack() {
}
/** Push element x onto stack. */
public void push(int x) {
while(!pollQ.isEmpty()){
helpQ.add(pollQ.poll());
}
pollQ.add(x);
while(!helpQ.isEmpty()){
pollQ.add(helpQ.poll());
}
}
/** Removes the element on top of the stack and returns that element. */
public int pop() {
return pollQ.poll();
}
/** Get the top element. */
public int top() {
return pollQ.peek();
}
/** Returns whether the stack is empty. */
public boolean empty() {
return pollQ.isEmpty();
}
}
如有错误,请指正!