lettcode
使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。
实现 MyStack 类:
- void push(int x) 将元素 x 压入栈顶。
- int pop() 移除并返回栈顶元素。
- int top() 返回栈顶元素。
- bboolean empty() 如果栈是空的,返回 true ;否则,返回 false 。
import java.util.LinkedList;
import java.util.Queue;/*** 使用队列实现栈 栈:先进后出 队列:先进先出** 数据入栈时,获取栈中已经存在的数据个数,将要入栈的数据放入队列,将之前已经放入的数据依次取出,在放入队列** 数据出栈时,直接从将队列第一位取出*/
public class MyStack {public static void main(String[] args) {MyStack myStack = new MyStack();myStack.push(10);myStack.push(10);System.out.println(myStack.top());System.out.println(myStack.pop());System.out.println(myStack.empty());}private Queue<Integer> queue = null;public MyStack() {queue = new LinkedList<>();}/*** 入栈时,将数据放入队列,将放入元素的前面的对象依次取出,放入队列** @param x 入栈元素*/public void push(int x) {int size = queue.size();queue.add(x);while (size-- > 0) {queue.add(queue.remove());}}public int pop() {return queue.remove();}public int top() {return queue.peek();}public boolean empty() {return queue.size() == 0;}
}