<剑指offer> 第5题
题目:
用两个栈实现一个队列。队列声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。
思路:
栈1用于存储元素,栈2用于弹出元素,负负得正
代码实现:
import java.util.Stack; public class MyQueue { //push后pop给output private Stack<Integer> input; //push input的元素后pop出栈显示元素 private Stack<Integer> output; private MyQueue(){ input = new Stack<>(); output = new Stack<>(); } //只要output栈为空,input栈不为空,就把input中所有的元素都压入output private void transfer(){ if(output.isEmpty()){ while(!input.isEmpty()){ output.push(input.pop()); } } } //队列尾加一个元素 public void add(int i){ input.push(i); transfer(); } //删除队首元素 public int remove(){ if(input.isEmpty() && output.isEmpty()){ throw new RuntimeException("queue is Empty"); } transfer(); return output.pop(); } public int peek(){ if(input.isEmpty() && output.isEmpty()){ throw new RuntimeException("queue is Empty"); } transfer(); return output.peek(); } public boolean isEmpty(){ return input.isEmpty() && output.isEmpty(); } }