正如标题所述,你需要使用两个栈来实现队列的一些操作。
队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素。
pop和top方法都应该返回第一个元素的值。
public class Solution {
private Stack<Integer> stack1;
private Stack<Integer> stack2;
public Solution() {
// do initialization if necessary
stack1 = new Stack<Integer>();
stack2 = new Stack<Integer>();
}
public void push(int element) {
// write your code here
stack1.push(element);
}
public int pop() {
// write your code here
if(!stack2.isEmpty()){
return stack2.pop();
}
while(!stack1.isEmpty()){
stack2.push(stack1.pop());
}
return stack2.pop();
}
public int top() {
// write your code here
if(!stack2.isEmpty()){
return stack2.peek();
}
while(!stack1.isEmpty()){
stack2.push(stack1.pop());
}
return stack2.peek();
}
}
相关题目:
使用两个队列模拟一个栈。附上代码:
public class StackImplementByTwoQueues {
//use 'queue1' and 'queue2' as a queue.That means only use the method 'addLast' and 'removeFirst'.
private LinkedList<Integer> queue1;
private LinkedList<Integer> queue2;
StackImplementByTwoQueues(){
queue1=new LinkedList<Integer>();
queue2=new LinkedList<Integer>();
}
public Integer pop(){
Integer re=null;
if(queue1.size()==0&&queue2.size()==0){
return null;
}
if(queue2.size()==0){
while(queue1.size()>0){
re=queue1.removeFirst();
if(queue1.size()!=0){//do not add the last element of queue1 to queue2
queue2.addLast(re);
}
}
}else if (queue1.size()==0){
while(queue2.size()>0){
re=queue2.removeFirst();
if(queue2.size()!=0){//do not add the last element of queue2 to queue1
queue1.addLast(re);
}
}
}
return re;
}
public Integer push(Integer o){
if(queue1.size()==0&&queue2.size()==0){
queue1.addLast(o);//queue2.addLast(o); is also ok
}
if(queue1.size()!=0){
queue1.addLast(o);
}else if(queue2.size()!=0){
queue2.addLast(o);
}
return o;
}
}