思路:我们利用两个队列来实现栈
1. 第一次入数据,两队列都为空,我们入第一个队列qu1
if(empty()){
qu1.offer(x);
}
2. 找空队列入第二个数据
if(qu1.isEmpty()){
qu1.offer(x);}else{
qu2.offer(x);}
3. 将不入数据的队列中的元素放到刚刚入数据的队列中
if(qu1.isEmpty()){
qu1.offer(x);
while(!qu2.isEmpty()){
qu1.offer(qu2.poll());
}
}else{
qu2.offer(x);
while(!qu1.isEmpty()){
qu2.offer(qu1.poll());
}
最后用队列实现了栈
完整代码如下:
class MyStack {
Queue<Integer> qu1;
Queue<Integer> qu2;
public MyStack() {
qu1=new LinkedList<>();
qu2=new LinkedList<>();
}
public void push(int x) {
if(empty()){
qu1.offer(x);
}else {
if(qu1.isEmpty()){
qu1.offer(x);
while(!qu2.isEmpty()){
qu1.offer(qu2.poll());
}
}else{
qu2.offer(x);
while(!qu1.isEmpty()){
qu2.offer(qu1.poll());
}
}
}
}
public int pop() {
if(empty()){
return -1;
}
if(qu1.isEmpty()){
return qu2.poll();
}else {
return qu1.poll();
}
}
public int top() {
if(empty()){
return -1;
}
if(qu1.isEmpty()){
return qu2.peek();
}else {
return qu1.peek();
}
}
public boolean empty() {
return qu1.isEmpty()&&qu2.isEmpty();
}
}
思路:
1. 先创建两个栈,其中一个栈一直入数据
2. 最后数据入完后,将数据转移到另外一个栈中,即可实现队列
完整代码如下:
class MyQueue {
Stack<Integer> stack1;
Stack<Integer> stack2;
public MyQueue() {
stack1=new Stack<>();
stack2=new Stack<>();
}
public void push(int x) {
stack1.push(x);
}
public int pop() {
if(empty()){
return -1;
}
if(!stack2.empty()){
return stack2.pop();
}
while (!stack1.empty()){
stack2.push(stack1.pop());
}
return stack2.pop();
}
public int peek() {
if(empty()){
return -1;
}
if(!stack2.isEmpty()){
return stack2.peek();
}
while (!stack1.empty()){
stack2.push(stack1.pop());
}
return stack2.peek();
}
public boolean empty() {
return stack1.empty() && stack2.empty();
}
}