Leetcode 225. Implement Stack us

作者: ShutLove | 来源:发表于2017-12-13 15:30 被阅读15次

    最近一直在忙一些个人的私事,导致好多计划都中断了。说多了都是借口,归根结底是自己没有规划好时间,坚持做下去,下面回正题继续做题。

    Implement the following operations of a stack using queues.
    push(x) -- Push element x onto stack.
    pop() -- Removes the element on top of the stack.
    top() -- Get the top element.
    empty() -- Return whether the stack is empty.

    思路:
    一、自己的第一个思路是用两个queue和一个变量top,一个queue专门负责存push进来的元素,一个queue负责在pop的时候临时存放push queue中前n-1个元素,top用来存当前最后一个push进来的元素。
    在pop的时候,需要先把push queue前n-1个元素移动到pop queue,把push queue最后一个元素remove以后,再把push queue和pop queue交换。

    二、在solution里看到第三种方法十分巧妙,用一个queue就可以实现。每次push把元素添加到队列以后,就把队列前n-1个元素重新入队。下面以依次push 1到4为例:
    1-->1,2-->2,1-->2,1,3-->3,2,1-->3,2,1,4-->4,3,2,1
    可以看到每次push元素后,队列就变成了相应的stack表达。
    下面发一下第二种方法的代码:

    public class HA_StackByQueue {
    private Queue<Integer> queue;
    
    /** Initialize your data structure here. */
    public HA_StackByQueue() {
        this.queue = new LinkedList<>();
    }
    
    /** Push element x onto stack. */
    public void push(int x) {
        this.queue.offer(x);
        int size = this.queue.size();
        while (size > 1) {
            this.queue.offer(this.queue.poll());
            size--;
        }
    }
    
    /** Removes the element on top of the stack and returns that element. */
    public int pop() {
        return this.queue.poll();
    }
    
    /** Get the top element. */
    public int top() {
        return this.queue.peek();
    }
    
    /** Returns whether the stack is empty. */
    public boolean empty() {
        return this.queue.isEmpty();
    }
    

    }

    相关文章

      网友评论

        本文标题:Leetcode 225. Implement Stack us

        本文链接:https://www.haomeiwen.com/subject/mdzaixtx.html