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;
}
}
}
复制代码