Java面试:在线编程题-经典题

该文章介绍了一种利用两个栈来模拟队列操作的方法。在Java中,通过创建两个栈A和B,当需要入队时元素压入栈A,出队时先检查栈B,如果不为空则直接从B弹出,否则将栈A的所有元素转移到B,然后从B弹出顶部元素。这样确保了FIFO(先进先出)的队列原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、用两个栈实现一个队列。

队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

解题思路:

始终维护s1作为存储空间,以s2作为临时缓冲区。

入队时,将元素压入s1。

出队时,判断s2是否为空,如不为空,则直接弹出顶元素;如为空,则将s1的元素逐个“倒入”s2,把最后一个元素弹出并出队。

参考答案:


class CQueue {
    Stack<Integer> A,B;
    public CQueue() {
        A = new Stack<Integer>();
        B = new Stack<Integer>();
    }    
    public void appendTail(int value) {
        A.push(value);
    }    
    public int deleteHead() {
        if(!B.empty()){
            return B.pop();
        }
        if(A.empty()){
            return -1;
        }
        while(!A.empty()){B.push(A.pop());}
        return B.pop();
    }
}
/**
 * Your CQueue object will be instantiated and called as such:
 * CQueue obj = new CQueue();
 * obj.appendTail(value);
 * int param_2 = obj.deleteHead();
 */

二、TODO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值