【剑指Offer1】 用两个栈实现队列
刚开始没理解题目,仔细看题发现要求用两个栈实现队列,思路如下:
队列的特点为“先进先出”,需要通过“”后进先出“”的栈来实现,只需要将两个栈分别用作入队栈和出队栈即可。
即栈A只负责元素入队,当队列顶部元素需要出队时,如果栈B不为空,则直接弹出栈顶元素作为出队元素,如果栈B为空,则先向栈B内压入栈A所有元素,最后出队元素由B栈弹出。
代码如下:
class CQueue { Stackqa = null; Stack qb = null; public CQueue() { qa = new Stack<>(); qb = new Stack<>(); } public void appendTail(int value) { qa.push(value); } public int deleteHead() { if (!qb.empty()) { return qb.pop(); } if (qa.empty()) { return -1; } while (!qa.empty()) { qb.push(qa.pop()); } return qb.pop(); } } /** * Your CQueue object will be instantiated and called as such: * CQueue obj = new CQueue(); * obj.appendTail(value); * int param_2 = obj.deleteHead(); */