队列的特点是先进先出,栈的特点是先进后出。
在出队时始终保持从其中一个队列剩下的最后一个元素进行出队Pop,其它元素在这之前已经复制到另一个队列里面。
两个队列只有三种状态。
1:两个队列都为空
2:队列1不为空,队列2为空
3:队列2不为空,队列1为空
具体实现:
package liuxs;
import java.util.LinkedList;
import java.util.Queue;
public class Demo1 {
public static void main(String[] args) {
MyStack s=new MyStack();
s.myPush(1);
s.myPush(2);
s.myPush(3);
s.myPush(4);
s.myPush(129);
int b=s.myPop();
System.out.println(b);
}
}
class MyStack {
private Queue<Integer> queue1 = new LinkedList<>();
private Queue<Integer> queue2 = new LinkedList<>();
public boolean myPush(int a) {
return queue1.offer(a);
}
public Integer myPop() {
if (queue1.isEmpty() && queue2.isEmpty()) {
return null;
}
if (queue1.isEmpty() != true) {
int size1 = queue1.size();
for (int i = 0; i < size1 - 1; i++) {
queue2.offer(queue1.poll());
}
return queue1.poll();
} else {
int size2 = queue2.size();
for (int i = 0; i < size2 - 1; i++) {
queue1.offer(queue2.poll());
return queue2.poll();
}
return queue2.poll();
}
}
public Integer mySize(){
return queue1.size()+queue2.size();
}
}