码迷,mamicode.com
首页 > 其他好文 > 详细

两个队列实现一个栈

时间:2017-12-04 00:12:02      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:方法   imp   span   string   依次   队列实现   return   bool   head   

【题目】两个队列实现一个栈

 

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 }

 

两个队列实现一个栈

标签:方法   imp   span   string   依次   队列实现   return   bool   head   

原文地址:http://www.cnblogs.com/jiangyi-uestc/p/7967728.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!