有两个相同的栈,一个里面放着自大到小排列的数,栈顶的数最小,另一个栈是空的.
不允许利用其它的数据结构,只能利用这两个栈,要求把第一个栈里的数字反过来,从
小到大排列,结果还放在原来的那个栈里面。
1 /**
2 * 有两个相同的栈,一个里面放着自大到小排列的数,栈顶的数最小,另一个栈是空的.
3 * 不允许利用其它的数据结构,只能利用这两个栈,要求把第一个栈里的数字反过来,从
4 * 小到大排列,结果还放在原来的那个栈里面。
5 */
6 public static void resortStack(Stack<Integer> stackA, Stack<Integer> stackB){
7 if(stackA == null || stackB == null)
8 return;
9 assert stackA != null && stackB != null;
10 if(stackA.size() <= 1)
11 return;
12 int len = stackA.size();
13 for(int i = 0; i < len - 1; i++){
14 int min = stackA.pop();
15 while(stackA.size() > i)
16 stackB.push(stackA.pop());
17 stackA.push(min);
18 while(!stackB.empty())
19 stackA.push(stackB.pop());
20 }
21 }
22 public static void testResortStack(){
23
24 resortStack(null, null);
25 Stack<Integer> stackA = new Stack<Integer>();
26 Stack<Integer> stackB = new Stack<Integer>();
27 for(int i = 10; i > 0; i--)
28 stackA.push(i);
29 System.out.println(stackA.toString());
30 resortStack(stackA, stackB);
31 System.out.println(stackA.toString());
32
33 }
34 /**
35 * @param args
36 */
37 public static void main(String[] args) {
38 // TODO Auto-generated method stub
39 testResortStack();
40 }