用队列实现栈oj
Posted ohana!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用队列实现栈oj相关的知识,希望对你有一定的参考价值。
题目内容:
解题思路:
- 首先考虑使用两个队列,队列的特性是先入先出,而栈的是后进先出
- 我们给定两个队列,一个队列一直保持空,只有在进行相应操作时会存在不空的情况
- 当一个队列中放入了元素,当要获取栈顶元素或者进行出栈时,就让这个队列中的元素依次放入到另一个队列中,只保留最后一个元素,进行peek或者是pop操作
解题代码:
class MyStack {
Queue<Integer> q1 = new LinkedList<>();
Queue<Integer> q2 = new LinkedList<>();
public MyStack() {
}
public void push(int x) {
q1.offer(x);
}
public int pop() {
if(!q1.isEmpty()){
while(q1.size() > 1){
q2.offer(q1.poll());
}
return q1.poll();
}else{
while(q2.size() > 1){
q1.offer(q2.poll());
}
return q2.poll();
}
}
public int top() {
int ret = 0;
if(!q1.isEmpty()){
while(q1.size() > 1){
q2.offer(q1.poll());
}
ret = q1.poll();
q2.offer(ret);
}else{
while(q2.size() > 1){
q1.offer(q2.poll());
}
ret = q2.poll();
q1.offer(ret);
}
return ret;
}
public boolean empty() {
if(q1.isEmpty() && q2.isEmpty()){
return true;
}else{
return false;
}
}
}
以上是关于用队列实现栈oj的主要内容,如果未能解决你的问题,请参考以下文章