赞
踩
欢迎浏览高耳机的博客
希望我们彼此都有更好的收获
感谢三连支持!
当队列中进入这些元素时,相应的栈1中元素出栈顺序与出队列相反,因此我们可以使用两个栈来使元素的出栈顺序相同;
通过将栈1元素出栈,再入栈栈2,此时出队列的顺序和出栈2的顺序相同,基于这个原理,我们开始实现代码:
- import java.util.ArrayDeque;
-
- public class MyQueueUsStack {
- public ArrayDeque<Integer> s1;
- public ArrayDeque<Integer> s2;
-
- public MyQueueUsStack(){
- s1 = new ArrayDeque<>();
- s2 = new ArrayDeque<>();
- }
-
- // 入队操作,直接将元素压入第一个栈
- public void push(int x){
- s1.push(x);
- }
-
- public int pop(){
- if(empty()){
- return -1;
- }
- if(s2.isEmpty()){
- // 如果第二个栈为空,则将第一个栈中的元素全部转移到第二个栈
- while (!s1.isEmpty()){
- s2.push(s1.pop());
- }
- }
- return s2.pop();
- }
-
- public int peek(){
- if(empty()){
- return -1;
- }
- if(s2.isEmpty()){
- while (!s1.isEmpty()){
- s2.push(s1.pop());
- }
- }
- return s2.peek();
- }
-
- public boolean empty(){
- return s1.isEmpty() && s2.isEmpty();
- }
- }
OJ:
https://leetcode.cn/problems/implement-queue-using-stacks/description/
当前一共有N个元素,当需要出栈栈顶元素67时,先将队列1中前N-1个元素放入到队列2中:
每次出栈时,只需要将不为空的队列的前N-1个元素放入空队列中,此时队列中的元素即为要出栈的元素;
入栈时,将元素放入不为空的队列中;若两个队列都为空,则放入创建的第一个队列中;
- import java.util.LinkedList;
- import java.util.Queue;
-
- public class MyStackUsQueue {
- public Queue<Integer> queue1;
- public Queue<Integer> queue2;
-
- public MyStackUsQueue(){
- queue1 = new LinkedList<>();
- queue2 = new LinkedList<>();
- }
-
- public void push(int x){
- if(empty()){
- queue1.offer(x);
- return;
- }
- if(!queue1.isEmpty()){
- queue1.offer(x);
- }else{
- queue2.offer(x);
- }
- }
-
- public int pop(){
- if(empty()){
- return -1;
- }
- if(!queue1.isEmpty()) {
- int size = queue1.size();
- for (int i = 0; i < size-1; i++) {
- queue2.offer(queue1.poll());
- }
- return queue1.poll();
- }else{
- int size = queue2.size();
- for (int i = 0; i < size-1; i++) {
- queue1.offer(queue2.poll());
- }
- return queue2.poll();
- }
- }
-
- public int peek(){
- if(empty()){
- return -1;
- }
- if(!queue1.isEmpty()) {
- int size = queue1.size();
- int ret = -1;
- for (int i = 0; i < size; i++) {
- ret = queue1.poll();
- queue2.offer(ret);
- }
- return ret;
- }else{
- int size = queue2.size();
- int ret = -1;
- for (int i = 0; i < size; i++) {
- ret = queue2.poll();
- queue1.offer(ret);
- }
- return ret;
- }
- }
-
- public boolean empty(){
- return queue1.isEmpty() && queue2.isEmpty();
- }
- }
OJ:
https://leetcode.cn/problems/implement-stack-using-queues/solutions/
希望这篇博客能为你理解java编程思想提供一些帮助。
如有不足之处请多多指出。
我是高耳机。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。