Leecode.232 用栈实现队列
题目链接:用栈实现队列
思路
较为简单,没什么好说的,就是在进行弹出和查看头部元素之前,进行一些列判断,如果二号队列里是空的,就要把一号队列里的值全部加进二号队列里,如果二号队列里有值,那么直接弹出。
解题方法
同思路
复杂度
- 时间复杂度:
无
- 空间复杂度:
无
Code
class MyQueue {
Stack<Integer> s1;
Stack<Integer> s2;
public MyQueue() {
s1 = new Stack();
s2 = new Stack();
}
public void push(int x) {
s1.push(x);
}
public int pop() {
if(!s2.isEmpty()){
return s2.pop();
}else{
while(!s1.isEmpty()){
s2.push(s1.pop());
}
return s2.pop();
}
}
public int peek() {
if(!s2.isEmpty()){
return s2.peek();
}else{
while(!s1.isEmpty()){
s2.push(s1.pop());
}
return s2.peek();
}
}
public boolean empty() {
return s1.isEmpty() && s2.isEmpty();
}
}
Leecode.225 用队列实现栈
题目链接:用队列实现栈
思路
难点在于放入的方法,要将队列分为主队列和辅助队列,每次加入值时加入到辅助队列中,然后将主队列的值全部加入到后面,实现栈的效果,在加入结束后,要把主队列和辅助队列交换应用,使得下次加入值时还是加入到辅助队列当中。
解题方法
同思路
复杂度
- 时间复杂度:
无
- 空间复杂度:
无
Code
class MyStack {
Queue<Integer> q1;//主队列
Queue<Integer> q2;//辅助队列
public MyStack() {
q1 = new LinkedList<>();
q2 = new LinkedList<>();
}
public void push(int x) {
q2.offer(x);
while(!q1.isEmpty()){
q2.offer(q1.poll());
}
Queue<Integer> temp;
temp = q1;
q1 = q2;
q2 = temp;
}
public int pop() {
return q1.poll();
}
public int top() {
return q1.peek();
}
public boolean empty() {
return q1.isEmpty();
}
}