【剑指Offer1】 用两个栈实现队列


刚开始没理解题目,仔细看题发现要求用两个栈实现队列,思路如下:

队列的特点为“先进先出”,需要通过“”后进先出“”的栈来实现,只需要将两个栈分别用作入队栈和出队栈即可。

即栈A只负责元素入队,当队列顶部元素需要出队时,如果栈B不为空,则直接弹出栈顶元素作为出队元素,如果栈B为空,则先向栈B内压入栈A所有元素,最后出队元素由B栈弹出。

代码如下:

class CQueue {

    Stack qa = 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();
 */

相关