算法題0006-藉助棧實現另一個棧的排序

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());
	}
	
}

点赞