剑指offer:用两个栈实现一个队列
Posted 小毛喵喵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer:用两个栈实现一个队列相关的知识,希望对你有一定的参考价值。
题目:
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
解决办法:
队列先进先出,栈先进后出(stack1和stack2)
其实主要要注意的点是:
①在添加时直接往第一个添加即可
②在删除时分情况,
第一:如果stack2不为空,则直接弹出stack2中的元素即可,因为stack2中的肯定要比stack1中的元素加进来早
第二:如果stack2是空的,则把stack1中的元素一一弹出并加入到stack2中,之后再弹出
如图测试数据:(结合下面代码看)
1 import java.util.Stack; 2 3 public class Solution { 4 Stack<Integer> stack1 = new Stack<Integer>(); 5 Stack<Integer> stack2 = new Stack<Integer>(); 6 7 public void push(int node) { 8 stack1.push(node); 9 } 10 11 public int pop() { 12 if(stack2.isEmpty()){ 13 while(!stack1.isEmpty()){ 14 stack2.push(stack1.pop()); 15 } 16 return stack2.pop(); 17 }else{ 18 return stack2.pop(); 19 } 20 } 21 22 public static void main(String[] args) { 23 Solution s = new Solution(); 24 //① 25 s.push(1); 26 //② 27 s.push(2); 28 //③ 29 s.push(3); 30 //④ 31 int a = s.pop(); 32 System.out.println(a); 33 //⑤ 34 int b = s.pop(); 35 System.out.println(b); 36 //⑥ 37 s.push(4); 38 //⑦ 39 int c = s.pop(); 40 System.out.println(c); 41 //⑧ 42 s.push(5); 43 //⑨ 44 int d = s.pop(); 45 System.out.println(d); 46 //⑩ 47 int e = s.pop(); 48 System.out.println(e); 49 } 50 }
以上是关于剑指offer:用两个栈实现一个队列的主要内容,如果未能解决你的问题,请参考以下文章