1.两个栈实现一个队列
思路:压入元素直接入stack1,删除元素先判断stack2中是否为空,如果不为空直接弹出;为空则将stack1中的元素取出压入 stack2中再弹出。代码:import java.util.Stack;public class TwoStackToQueue {private Stack stack1 = new Stack();private Stack stack2 = new Stack();public void add(Integer n){stack1.push(n);}public Integer poll(){if(stack1.isEmpty()&&stack2.isEmpty()){return null;}if(stack2.isEmpty()){while(!stack1.isEmpty()){stack2.push(stack1.pop());}}return (Integer)stack2.pop();}public boolean isEmpty(){if(stack1.isEmpty()&&stack2.isEmpty()){return true;}else{return false;}}}复制代码
2.两个队列实现一个栈
思路:要用队列(先进先出)实现栈(先进后出),则是要获取deque1队尾的元素,所以可以把前n-1个元素压入空队列deque2中,弹出deque1剩余的一个队尾元素。代码:import java.util.ArrayDeque;import java.util.Deque;public class TwoQueueToStack {private Deque<Integer> deque1;private Deque<Integer> deque2;public TwoQueueToStack(){deque1 = new ArrayDeque<>();deque2 = new ArrayDeque<>();}public void push(Integer n){if(deque2.isEmpty()){deque1.offer(n);}else {deque2.offer(n);}}public Integer pop(){if(deque1.isEmpty()&&deque2.isEmpty()){return null;}if(deque1.isEmpty()&&!deque2.isEmpty()){while (deque2.size()>0){deque1.add(deque2.poll());}}while (deque1.size()>1){deque2.add(deque1.poll());}return deque1.poll();}public boolean isEmpty(){if(deque1.isEmpty()&&deque2.isEmpty()){return true;}else{return false;}}}复制代码