两个队列实现一个栈
Posted 梵高先生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个队列实现一个栈相关的知识,希望对你有一定的参考价值。
【题目】两个队列实现一个栈
1. 首先,第一个元素1,选择一个队列插入,比如,选择queue1;
2. 然后,模拟入栈,后续元素插入已经含有元素的队列中,比如,queue1中再依次插入2,3;
3. 接着,模拟出栈,后入先出,此时应该3出栈,方法是让queue1先出1,2,同时,queue2依次入1,2,此时queue1出3,即可实现。
1 import java.util.LinkedList; 2 import java.util.Queue; 3 4 public class Main { 5 6 public static void main(String[] args) { 7 8 Queue<Integer> queue1 = new LinkedList<Integer>(); 9 Queue<Integer> queue2 = new LinkedList<Integer>(); 10 11 MyStack myQueue = new MyStack(queue1, queue2); 12 13 myQueue.appendTail(1); 14 myQueue.appendTail(2); 15 myQueue.appendTail(3); 16 System.out.println(myQueue.deleteHead()); 17 System.out.println(myQueue.deleteHead()); 18 myQueue.appendTail(4); 19 System.out.println(myQueue.deleteHead()); 20 System.out.println(myQueue.deleteHead()); 21 22 } 23 } 24 25 class MyStack { 26 27 private Queue<Integer> queue1; 28 private Queue<Integer> queue2; 29 30 public MyStack(Queue<Integer> queue1, Queue<Integer> queue2) { 31 this.queue1 = queue1; 32 this.queue2 = queue2; 33 } 34 35 public Boolean appendTail(Integer num) { 36 37 if (null == queue1 || null == queue2 || null == num) { 38 return false; 39 } 40 41 if (0 == queue2.size()) { 42 queue1.offer(num); 43 return true; 44 } 45 46 if (0 == queue1.size()) { 47 queue2.offer(num); 48 return true; 49 } 50 51 return false; 52 53 } 54 55 public Integer deleteHead() { 56 57 if (null == queue1 || null == queue2) { 58 59 return null; 60 } 61 62 if (0 != queue1.size() && 0 == queue2.size()) { 63 64 int length = queue1.size(); 65 66 for (int i = 0; i < length - 1; i++) { 67 queue2.offer(queue1.poll()); 68 } 69 return queue1.poll(); 70 } 71 72 if (0 == queue1.size() && 0 != queue2.size()) { 73 74 int length = queue2.size(); 75 76 for (int i = 0; i < length - 1; i++) { 77 queue1.offer(queue2.poll()); 78 } 79 return queue2.poll(); 80 } 81 82 return null; 83 84 } 85 86 }
以上是关于两个队列实现一个栈的主要内容,如果未能解决你的问题,请参考以下文章