【用两个栈来实现一个队列】
1号栈用来实现入队的功能,即想入队的话,就让1号栈压栈就行了;那么如何实现出队功能呢,如果2号栈中有元素,让2号栈弹栈即可,若2号栈中没有元素了,现在入队最早的其实在1号栈的最底下,故令1号站都弹出,都压入2号栈中,这样入队最早的元素现在在2号栈的最顶端,再使2号栈弹栈即可。
【用两个队列来实现一个栈】
让一号队列实现压栈的功能,即压栈就让元素进入1号队列中,如果想弹栈,(后进先出),让1号队列的元素都出队,都入队到2号队列中去,除了最后一个元素,直接让他“出栈”,然后将队列1的变量储存队列2的地址,将队列2设为空。
class MyStack {
Queue<Integer> q1;
Queue<Integer> q2;
public MyStack() {
q1 = new LinkedList();
q2 = new LinkedList();
}
public void push(int x) {
q1.add(x);
}
public int pop() {
while(q1.size()>1){
q2.add(q1.remove());
}
int tmp = q1.remove();
q1 = q2;
q2 = new LinkedList();
return tmp;
}
public int top() {
int tmp = this.pop();
q1.add(tmp);
return tmp;
}
public boolean empty() {
return q1.size()==0;
}
}