1 import java.util.*;
 2 
 3 public class TwoStackImplementDeque {
 4     public static void main(String[] args) {
 5         DequeStructure d = new DequeStructure();
 6         d.leftPush(4);
 7         d.leftPush(3);
 8         d.leftPush(2);
 9         d.leftPush(1);
10         d.rightPush(9);
11         d.rightPush(8);
12         d.rightPush(7);
13         d.rightPush(6);
14         System.out.println(d.leftPop());
15         System.out.println(d.leftPop());
16         System.out.println(d.leftPop());
17         System.out.println(d.leftPop());
18         System.out.println(d.leftPop());
19         System.out.println(d.leftPop());
20         System.out.println(d.leftPop());
21         System.out.println(d.leftPop());
22     }
23 }
24 
25 class DequeStructure {
26     Deque<Integer> stack1;
27     Deque<Integer> stack2;
28     Deque<Integer> stack3;
29     public DequeStructure () {
30         stack1 = new LinkedList<>();
31         stack2 = new LinkedList<>();
32         stack3 = new LinkedList<>();
33     }
34 
35     public void leftPush(int x) {
36         stack1.push(x);
37     }
38 
39     public void rightPush(int x) {
40         stack2.push(x);
41     }
42 
43     public int leftPop() {
44         if (stack1.isEmpty() && stack2.isEmpty()) {
45             return -1;
46         }
47         if (stack1.isEmpty()){
48             shuffle();
49         }
50         return stack1.pop();
51     }
52 
53     public int rightPop() {
54         if (stack1.isEmpty() && stack2.isEmpty()) {
55             return -1;
56         }
57         if (stack2.isEmpty()) {
58             shuffle();
59         }
60         return stack2.pop();
61     }
62     
63     private void shuffle() {
64         //用两个指针,可以省去写多余的代码块!!!
65         Deque<Integer> nonEmpty = stack1;
66         Deque<Integer> empty = stack2;
67         if (stack1.isEmpty()) {
68             nonEmpty = stack2;
69             empty = stack1;
70         }
71 
72         int halfSize = nonEmpty.size() / 2;
73         for (int i = 0; i < halfSize; i++) {
74             stack3.push(nonEmpty.pop());
75         }
76         while (!nonEmpty.isEmpty()) {
77             empty.push(nonEmpty.pop());
78         }
79 
80         while (!stack3.isEmpty()) {
81             nonEmpty.push(stack3.pop());
82         }
83     }
84 }

 

posted on 2018-03-20 03:54  mayinmiao  阅读(171)  评论(0编辑  收藏  举报