代码随想录算法训练营第十天|LeetCode232,225
232.用栈实现队列
设计两个栈一个输入栈,一个输出栈,在push数据的时候,只要数据放进输入栈就好,但在pop的时候,,输出栈如果为空,就把进栈数据全部导入进来,再从出栈弹出数据,如果输出栈不为空,则直接从出栈弹出数据就可以了。如果进栈和出栈都为空的话,说明模拟的队列为空了。
class MyQueue {
Deque<Integer> inStack;
Deque<Integer> outStack;
public MyQueue() {
inStack = new ArrayDeque<>();
outStack = new ArrayDeque<>();
}
public void push(int x) {
inStack.push(x);
}
public int pop() {
trans();
return outStack.pop();
}
public int peek() {
trans();
return outStack.peek();
}
//如果outStack为空,则将inStack里面的所有数据放入outStack中
public void trans(){
if (outStack.isEmpty()){
while (!inStack.isEmpty()){
outStack.push(inStack.pop());
}
}
}
public boolean empty() {
return inStack.isEmpty()&&outStack.isEmpty();
}
}
225. 用队列实现栈
一个队列在模拟栈弹出元素的时候只要将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部,此时再去弹出元素就是栈的顺序了。
class MyStack {
Deque<Integer> myStack;
public MyStack() {
myStack = new ArrayDeque<>();
}
public void push(int x) {
myStack.add(x);
int size = myStack.size();
while (size-- > 1){
myStack.add(myStack.remove());
}
}
public int pop() {
return myStack.remove();
}
public int top() {
return myStack.element();
}
public boolean empty() {
return myStack.isEmpty();
}
}