# 第一章 栈和队列

## 1.5 用一个栈实现另一个栈的排序

### 【题解】

• 如果 temp ≤ another 的栈顶元素，则将 temp 直接压入 another；
• 如果 temp > another 的栈顶元素，则将 another 中的元素逐一弹出压入 stack，直到 temp ≤ another 的栈顶元素，再将 temp 压入 another。

### 【实现】

• SortAStack.java
``````import java.util.Stack;

public class SortAStack {

private SortAStack() {}

public static void sortAStackByAnotherStack(Stack<Integer> stack) {
if (stack == null) {
throw new RuntimeException("参数不合法！");
}
Stack<Integer> another = new Stack<>();
int temp = 0;
while (!stack.empty()) {
temp = stack.pop();
while (!another.empty() && another.peek() > temp) {
stack.push(another.pop());
}
another.push(temp);
}
while (!another.empty()) {
stack.push(another.pop());
}
}

}
``````
• SortAStackTest.java
``````import java.util.Iterator;
import java.util.Stack;

public class SortAStackTest {

public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
SortAStack.sortAStackByAnotherStack(stack);
Iterator<Integer> iterator = stack.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}

}
``````