LeetCode 225 队列做的栈
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。
实现 MyStack 类:
void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/implement-stack-using-queues
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
为巩固假期学习的java,最近开始刷的题都用java写了。
Stack类:栈类 过时 public class Stack<E> extends Vector<E>
Queue:队列类
Deque:双端队列(栈操作建议使用)
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
public interface Deque<E> extends Queue<E> 扩展了java.util.Collection接口
import java.util.ArrayDeque;
import java.util.Queue;
/**
* leetcode 225 使用队列实现栈
*
* Stack类:栈类 过时 public class Stack<E> extends Vector<E>
* Queue:队列类
* Deque:双端队列(栈操作建议使用)
*
* public class LinkedList<E>
* extends AbstractSequentialList<E>
* implements List<E>, Deque<E>, Cloneable, java.io.Serializable
*
*
* public interface Deque<E> extends Queue<E> 扩展了java.util.Collection接口
*/
public class MyStack {
private Queue<Integer> q1;
private Queue<Integer> q2;
public MyStack() {
q1 = new ArrayDeque<>();
q2 = new ArrayDeque<>();
}
// 完成push()操作
/**
* 思路:由于队列是先进先出,所以先将元素放入q1,
* 将q2中已存元素转入q1,再将q1元素倒回q2,就能完成
* 元素的先进后出
* @param x 入栈元素
*/
public void push(int x) {
if (q2 == null) {
q2.add(x);
}
else {
q1.add(x);
while ( ! q2.isEmpty()) {
q1.add(q2.peek());
q2.remove();
}
while (! q1.isEmpty()) {
q2.add(q1.peek());
q1.remove();
}
}
}
public int pop() {
return q2.remove();
}
public int top() {
return q2.peek();
}
public boolean empty() {
return q2.isEmpty();
}
/* // 测试
public static void main(String[] args) {
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
System.out.println(myStack.pop());
myStack.push(3);
System.out.println(myStack.pop());
}*/
}