题目:用两个栈实现一个队列,队列的声明如下,请实现它的两个类appendTail(Integer data)和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。
话不多说,直接撸上代码:
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node);
}
public int pop() {
if(stack2.size()<=0){
while(stack1.size()>0){
Integer data = stack1.pop();
stack2.push(data);
}
}
if(stack2.size()<=0){
return (Integer)null;
}
return stack2.pop();
}
}
思路;有两个栈stack1和是stack2。当有数据插入时,我们统一将他们放在stack1中,取数据的时候,我们将stack1中的数据全部弹出,弹入到stack2中。当我们取数据的时候,如果stack2.size()>0,直接stack2.pop()即可;依次循环。
用两个队列实现栈
import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;
public class TwoQueueImplStack {
Queue<Integer> queue1 = new ArrayBlockingQueue<Integer>(100);
Queue<Integer> queue2 = new ArrayBlockingQueue<Integer>(100);
public void push(Integer data) {
queue1.add(data);
}
public Integer pop() {
if(queue1.size()<=0 &&queue2.size()<=0) {
try {
throw new Exception("没有数据");
} catch (Exception e) {
e.printStackTrace();
}
}
if(queue1.size()==1) {
return queue1.poll();
}else if(queue1.size()>0) {
while(queue1.size()>1) {
queue2.add(queue1.poll());
}
return queue1.poll();
}else if(queue2.size()>0) {
while(queue2.size()>1) {
queue1.add(queue2.poll());
}
return queue2.poll();
}
return null;
}
}