剑指Offer-06用两个栈实现队列

49 阅读1分钟
Stack stack1;
Stack stack2;

public CQueue06() {
    //题目要求两个栈实现队列
    stack1 = new Stack();
    stack2 = new Stack();
}

public void appendTail(int value) {
    //stack1用来存所有的值
    stack1.push(value);
}

public int deleteHead() {
    if(stack1.empty()){
        return -1;
    }
    /*根据栈的特性 先进后出
    队列的特性 先进先出
    也就是在删除一个元素的时候把栈反过来然后出栈*/
    while (!stack1.empty()) {
        //反过来存到stack2
        stack2.push(stack1.pop());
    }
    //出栈保存结果
    int res = (int) stack2.pop();
    //再返回来放回stack1 如果不返回来再插入数据会出问题 可以优化
    while (!stack2.empty()){
        stack1.push(stack2.pop());
    }
    return res;

}

 

public int deleteHead() {
    /*根据栈的特性 先进后出
    队列的特性 先进先出
    也就是在删除一个元素的时候把栈反过来然后出栈*/
    //如果stack2还有值的话就没必要把stack1倒过来 因为是stack2先出
    if(stack2.empty()) {
        while (!stack1.empty()) {
            //反过来存到stack2
            stack2.push(stack1.pop());
        }
    }
    return stack2.empty()? -1 : (int) stack2.pop();
}

优化后也不是很理想 看了下别人的答案没按要求用栈实现