1.題目
一個棧中元素類型爲整型,要求將棧從棧頂到棧底按降序排列,只能申請一個棧,但不能申請額外的數據結構。
2.解法
步驟1 彈出stack的棧頂元素val
- 若tmp棧頂元素小於val,彈出tmp棧頂元素,直到tmp棧頂元素不小於val;
- 將val壓入tmp棧中
- 循環1直到stack棧爲空,此時tmp棧從棧頂到棧底已經升序排列
步驟2 將tmp棧中元素依次pop放入stack棧中
/**
* 用一個棧(tmp)實現另一個棧(stack)的排序
* 1.彈出stack的棧頂元素val
* 1.1若tmp棧頂元素小於val,彈出tmp棧頂元素,直到tmp棧頂元素不小於val;
* 1.2將val壓入tmp棧中
* 循環1直到stack棧爲空,此時tmp棧從棧頂到棧底已經升序排列
*
* 2.將tmp棧中元素依次pop放入stack棧中
* @param stack
*/
public void sortStackByStack(Stack<Integer> stack) {
Stack<Integer> tmp = new Stack<>();
while (!stack.isEmpty()) {
int val = stack.pop();
while (!tmp.isEmpty() && tmp.peek() < val) {
stack.push(tmp.pop());
}
tmp.push(val);
}
while (!tmp.isEmpty()) {
stack.push(tmp.pop());
}
}