解析:(从队头输出,再从队尾插入)
题目要求:请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push
、top
、pop
和 empty
)。
大体思路,:实际上只要使用一个队列就可以实现栈。
插入的时候:还是正常插入。
输出的时候:将需要输出的队尾元素a前面的所有元素,依次出队在添加到队尾。这样操作下,a就变成队头元素了,直接让a出队。
查找栈顶元素的时候:和输出的时候步骤一样,只是a不需要删除,最后a出队后,再添加到队尾就是了。
用两个队做,其实就是把本来输出并插到到队尾的元素,暂存到一个队中。
代码:
class MyStack {
LinkedList<Integer> list;
public MyStack() {
list = new LinkedList<>();
}
public void push(int x) {
list.add(x);
}
public int pop() {
int len = list.size() - 1;
while(len > 0) {
list.add(list.pop());
len--;
}
return list.pop();
}
public int top() {
int len = list.size() - 1;
while(len > 0) {
list.add(list.pop());
len--;
}
int num = list.peek();
list.add(list.pop());
return num;
}
public boolean empty() {
return list.isEmpty();
}
}
/**
* Your MyStack object will be instantiated and called as such:
* MyStack obj = new MyStack();
* obj.push(x);
* int param_2 = obj.pop();
* int param_3 = obj.top();
* boolean param_4 = obj.empty();
*/