面试题 03.05. 栈排序

2020-08-14  本文已影响0人  编程小王子AAA

面试题 03.05. 栈排序

栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。该栈支持如下操作:push、pop、peek 和 isEmpty。当栈为空时,peek 返回 -1。


class SortedStack {

    private Stack<Integer> data = new Stack<>();
    private Stack<Integer> help = new Stack<>();

    public SortedStack() {
        super();
    }
    
    public void push(int val) {
        if(isEmpty()) {
            data.push(val);
            while(!help.isEmpty()) {
                data.push(help.pop());
            }
        } else {
            int top = peek();
            if(top >= val) {
                data.push(val);
                while(!help.isEmpty()) {
                    data.push(help.pop());
                }
            } else {
                help.push(data.pop());
                push(val);
            }
        }
    }
    
    public void pop() {
        if(!isEmpty()) {
            data.pop();
        }
    }
    
    public int peek() {
        if(isEmpty()) {
            return -1;
        } else {
            return data.peek();
        }
    }
    
    public boolean isEmpty() {
        return data.isEmpty();
    }
}
/**
 * Your SortedStack object will be instantiated and called as such:
 * SortedStack obj = new SortedStack();
 * obj.push(val);
 * obj.pop();
 * int param_3 = obj.peek();
 * boolean param_4 = obj.isEmpty();
 */
上一篇 下一篇

猜你喜欢

热点阅读