232.用栈实现队列
参考文章:代码随想录
参考视频:栈的基本操作! | LeetCode:232.用栈实现队列_哔哩哔哩_bilibili
解题思路:栈的特点是先进后出,队列的特点是先进先出,所以要用栈实现队列的话, 需要准备两个栈,一个作为进的栈stackIn,一个作为出的栈stackOut,每当要存储一个新元素的时候,直接push就可以了,而当需要实现队列pop的时候,需要将stackIn的元素清空,若stackOut为空的时候,都存入到stackOut中,再去pop stackOut。实现队列peek的时候,也是用上述方法,最后去peek stackOut。
public class MyQueue {
Stack<Integer> stackIn;
Stack<Integer> stackOut;
public MyQueue() {
stackIn = new Stack<Integer>();
stackOut = new Stack<Integer>();
}
public void push(int x) {
stackIn.push(x);
}
public int pop() {
clearStackIn();
return stackOut.pop();
}
public int peek() {
clearStackIn();
return stackOut.peek();
}
public boolean empty() {
clearStackIn();
return stackOut.isEmpty();
}
public void clearStackIn(){
if(stackOut.isEmpty()){
while(!stackIn.isEmpty()){
stackOut.push(stackIn.pop());
}
}
}
}
225. 用队列实现栈
参考文章:代码随想录
参考视频:队列的基本操作! | LeetCode:225. 用队列实现栈_哔哩哔哩_bilibili
解题思路:用一个队列queue就可以实现栈的操作了,每当push一个元素的时候,queue首先存入这个元素,然后获取这个queue的大小size,用while循环将除了新元素以外的元素弹出再存进,这样此队列最先出来的一定是最先存进去的元素,即后进先出。
public class MyStack {
Queue<Integer> queue;
public MyStack() {
queue = new LinkedList<Integer>();
}
public void push(int x) {
queue.offer(x);
int size = queue.size();
while(size-->1){
queue.offer(queue.poll());
}
}
public int pop() {
return queue.poll();
}
public int top() {
return queue.peek();
}
public boolean empty() {
return queue.isEmpty();
}
}