232. 用栈实现队列
程序员文章站
2022-07-11 08:22:19
...
用栈实现队列
使用栈实现队列的下列操作:
- push(x) – 将一个元素放入队列的尾部。
- pop() – 从队列首部移除元素。
- peek() – 返回队列首部的元素。
- empty() – 返回队列是否为空。
示例:
MyQueue queue = new MyQueue();
queue.push(1);
queue.push(2);
queue.peek(); // 返回 1
queue.pop(); // 返回 1
queue.empty(); // 返回 false
思路+代码+注释:
private Stack<Integer> stack;
public TwoThreeTwo() {
stack=new Stack<>();
}
/** Push element x to the back of queue. */
public void push(int x) {
stack.add(x);
}
/** Removes the element from in front of queue and returns that element. */
public int pop() {
/*
弹出栈中的元素,直到倒数第二个元素,将弹出的元素记录到list中,记录弹出的最后一个元素,然后将list中的元素从后往前重新加入到栈中,返回最后一个元素
*/
List<Integer> nums=new ArrayList<>();
while (stack.size()>1)
{
nums.add(stack.pop());
}
Integer returnNum=stack.pop();
for (int i = nums.size()-1; i > -1; i--) {
stack.add(nums.get(i));
}
return returnNum;
}
/** Get the front element. */
public int peek() {
List<Integer> nums=new ArrayList<>();
int res=0;
while (stack.size()>0)
{
int num=stack.pop();
nums.add(num);
if (stack.size()==0)
{
res=num;
}
}
for (int i = nums.size()-1; i > -1; i--) {
stack.add(nums.get(i));
}
return res;
}
/** Returns whether the queue is empty. */
public boolean empty() {
return stack.empty();
}