从o开始刷题(4) - 用一个栈实现另一个栈的排序

139 阅读1分钟

[程序源代码面试指南第二版] 用一个栈实现另一个栈的排序

描述

只许申请一个栈,用栈排序另一个栈使他从大到小

思路

把stack中元素压入help,让help栈中元素从小到大,最后再压入stack

  1. 排序栈stack,辅助栈help
  2. stack pop栈顶元素,叫做cur,用cur和help栈顶元素进行比较 2.1. cur如果小于等于help栈顶元素,压入help 2.2. 如果大于则将help的元素逐一弹出压入stack,直到cur小于等于help,再将cur压入help
  3. 最后讲help压入stack

咳咳

  1. 判断栈为空

附件

public class STACK_sort {
    public static void sortStackByStack(Stack<Integer> stack){
        Stack<Integer> help = new Stack<>();
        while(!stack.isEmpty()){
            int cur = stack.pop();
            while(!help.isEmpty() && help.peek() > cur){
                stack.push(help.pop());
            }
            help.push(cur);
        }
        while(!help.isEmpty()){
            stack.push(help.pop());
        }
        System.out.println("help"+help);
    }
}