题目链接:232. 用栈实现队列 - 力扣(LeetCode)
个人思路:这一道题唯一有点疑问的是出栈环节,如何出栈,首先我们使用两个栈来模拟队列的先入先出,那么一个栈A负责进,然后如果要出栈的话,那就把栈A的元素先弹出,然后再加入到栈B里去。
public int pop() {
if(stackOut.isEmpty()){
while(!stackIn.isEmpty()){
stackOut.push(stackIn.pop());
}
}
return stackOut.pop();
}
先判断栈B是否是空,如果是空的话,那么我们就先把栈A的元素弹出来,然后再压进栈B,返回的结果是栈B的出栈函数就可以了
整体代码如下:
class MyQueue {
Stack<Integer> stackIn ;
Stack<Integer> stackOut;
public MyQueue() {
stackIn = new Stack<>();
stackOut = new Stack<>();
}
public void push(int x) {
stackIn.push(x);
}
public int pop() {
if(stackOut.isEmpty()){
while(!stackIn.isEmpty()){
stackOut.push(stackIn.pop());
}
}
return stackOut.pop();
}
public int peek() {
if(stackOut.isEmpty()){
while(!stackIn.isEmpty()){
stackOut.push(stackIn.pop());
}
}
return stackOut.peek();
}
public boolean empty() {
return stackIn.isEmpty()&&stackOut.isEmpty();
}
}
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue obj = new MyQueue();
* obj.push(x);
* int param_2 = obj.pop();
* int param_3 = obj.peek();
* boolean param_4 = obj.empty();
*/
题目链接:225. 用队列实现栈 - 力扣(LeetCode)
个人思路:额,使用一个队列来模拟栈,那么出栈的时候将目的元素前的所有元素弹出,再加进队列里,紧接着弹出来的元素就是目的元素。其实这个需要了解队列里的一些函数。
整体代码如下:
class MyStack {
Deque<Integer> que1;
public MyStack() {
que1 = new ArrayDeque<>();
}
public void push(int x) {
que1.addLast(x);
}
public int pop() {
int size = que1.size();
size--;
while(size-->0){
que1.addLast(que1.peekFirst());
que1.pollFirst();
}
int res = que1.pollFirst();
return res;
}
public int top() {
return que1.peekLast();
}
public boolean empty() {
return que1.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();
*/