写在前面:第一次快速accepted,而且53 ms, faster than 98.61% of Java online submissions for Implement Stack using Queues.但是使用的是数组,貌似不是严格符合题目要求。
1. 使用Array
class MyStack {
private int top;
private int[] stack;
/** Initialize your data structure here. */
public MyStack() {
this.top = -1;
this.stack = new int[500];
}
/** Push element x onto stack. */
public void push(int x) {
this.stack[++top] = x;
}
/** Removes the element on top of the stack and returns that element. */
public int pop() {
int pop = stack[top--];
return pop;
}
/** Get the top element. */
public int top() {
return stack[top];
}
/** Returns whether the stack is empty. */
public boolean empty() {
return top==-1?true:false;
}
}
/**
* 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();
*/
2. 使用LinkList
class MyStack {
Queue<Integer> queue;
/** Initialize your data structure here. */
public MyStack() {
this.queue = new LinkedList<>();//注意链表是先进先出
}
/** Push element x onto stack. */
public void push(int x) {
queue.add(x);
for(int i =0;i<queue.size()-1;i++)
queue.add(queue.poll());//将先进入链表的元素按顺序放到x的后面,以实现栈的后进先出
}
/** Removes the element on top of the stack and returns that element. */
public int pop() {
return queue.poll();
}
/** Get the top element. */
public int top() {
return queue.peek();
}
/** Returns whether the stack is empty. */
public boolean empty() {
return queue.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();
*/