牛客刷题——用两个栈实现队列

该博客介绍了如何利用两个栈的特性来模拟队列的Push和Pop操作,以达到先入先出的效果。在Push操作中,将栈2的元素转移到栈1,然后将新元素Push到栈1;在Pop操作时,将栈1的元素转移到栈2,再从栈2 Pop出元素。这种方法巧妙地利用了栈和队列的性质,实现了数据结构的转换。
摘要由CSDN通过智能技术生成

题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

 队列是先入先出,堆栈是先入后出,通过两个堆栈的push和pop操作可以实现堆栈的元素反转,从而达到先入先出的效果。

假设stack1是正常的栈,statck2是逆序的栈(和队列顺序一致),对于push操作,要保证新push的元素位于所有元素的最后,所以要先将stack2的元素pop出来push进stack1里,然后将新元素push,对于pop操作,要保证pop的元素的最先push进去的,相当于pop出栈底元素,所以要先将stack1的元素pop出来push进stack2,然后stack2pop出元素。

完整代码如下:

     Stack<Integer> stack1 = new Stack<Integer>();
	 Stack<Integer> stack2 = new Stack<Integer>();
	    
	 public void push(int node) {
		 while(!stack2.empty()) {
			 int now = stack2.pop();
			 stack1.push(now);
		 }
	        stack1.push(node);
	 }
	    
	 public int pop() {
		 while(!stack1.empty()) {
			 int now = stack1.pop();
			 stack2.push(now); 
		 }
		 return stack2.pop();
	    
	 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值