第十天 今天开始学习stack相关
class MyQueue { Stack<Integer> in; Stack<Integer> out; public MyQueue() { in = new Stack<>(); out = new Stack<>(); } public void push(int x) { in.push(x); } public int pop() { if(out.isEmpty()){ while(!in.isEmpty()){ out.push(in.pop()); } } return out.pop(); } public int peek() { if(out.isEmpty()){ while(!in.isEmpty()){ out.push(in.pop()); } } return out.peek(); } public boolean empty() { return in.isEmpty()&&out.isEmpty(); } } /** * Your MyQueue object will be instantiated and called as such: * MyQueue obj = new MyQueue(); * obj.push(x); * int param_2 = obj.pop(); * int param_3 = obj.peek(); * boolean param_4 = obj.empty(); */
把一个stack里面的东西都从头都push到第二个stack里,这样顺序就保持先进先出了。
class MyStack { Queue<Integer> q1; Queue<Integer> q2; public MyStack() { q1 = new LinkedList<>(); q2 = new LinkedList<>(); } public void push(int x) { q1.offer(x); } public int pop() { while(q1.size()>1){ q2.offer(q1.poll()); } while(q2.size()>0){ q1.offer(q2.poll()); } return q1.poll(); } public int top() { while(q1.size()>1){ q2.offer(q1.poll()); } int tempValue = q1.peek(); q2.offer(q1.poll()); Queue temp = q1; q1 = q2; q2 = temp; return tempValue; } public boolean empty() { return q1.isEmpty()&&q2.isEmpty(); } }
这道题和上道题不一样的地方是,Q2只是一个帮助排列元素顺序的容器,最终元素还需要返回到Q1。
对帮助理解队列和栈的概念很有帮助
标签:q1,q2,第十天,队列,随想录,int,isEmpty,public,out From: https://www.cnblogs.com/catSoda/p/16812682.html