最基础的题目了,用两个队列实现栈。
注意:Java中,其实queue底层就是链表,因此。这样创建队列:
Queue<Integer> queue = new LinkedList<>();
思路:
创建两个队列,一个queue,一个help,每次进栈就进queue,每次出栈时,把queue中前n-1个数倒入help中,然后,出栈queue最后一个数,然后,将help和queue的指针交换,help变成新的queue,queue为空了,就变成help。
代码:
public static class TwoQueueStack{
Queue<Integer> queue = new LinkedList<>();
Queue<Integer> help = new LinkedList<>();
public void push(int obj){
queue.add(obj);
}
public Integer pop(){
if(queue.isEmpty()){
throw new ArrayIndexOutOfBoundsException("栈为空");
}
while (queue.size()>1){
help.add(queue.poll());
}
int res=queue.poll();
Queue<Integer> temp=help;
help=queue;
queue=temp;
return res;
}
public Integer peek(){
if(queue.isEmpty()){
throw new ArrayIndexOutOfBoundsException("栈为空");
}
while (queue.size()>1){
help.add(queue.poll());
}
int res=queue.poll();
help.add(res);
Queue<Integer> temp=help;
help=queue;
queue=temp;
return res;
}
}