LeetCode 题解(190): Implement Queue using Stacks

题目:

Implement the following operations of a queue using stacks.

  • push(x) -- Push element x to the back of queue.
  • pop() -- Removes the element from in front of queue.
  • peek() -- Get the front element.
  • empty() -- Return whether the queue is empty.
Notes:
  • You must use only standard operations of a stack -- which means only push to top, peek/pop from top, size, and is empty operations are valid.
  • Depending on your language, stack may not be supported natively. You may simulate a stack by using a list or deque (double-ended queue), as long as you use only standard operations of a stack.
  • You may assume that all operations are valid (for example, no pop or peek operations will be called on an empty queue).
题解:

数据结构。

C++版:

class Queue {
public:
    stack<int> s1, s2;
    // Push element x to the back of queue.
    void push(int x) {
        s1.push(x);
    }

    // Removes the element from in front of queue.
    void pop(void) {
        if(s2.empty()) {
            while(!s1.empty()) {
                s2.push(s1.top());
                s1.pop();
            }
        }
        if(!s2.empty())
            s2.pop();
    }

    // Get the front element.
    int peek(void) {
        if(s2.empty()) {
            while(!s1.empty()) {
                s2.push(s1.top());
                s1.pop();
            }
        }
        if(!s2.empty())
            return s2.top(); 
    }

    // Return whether the queue is empty.
    bool empty(void) {
        return s1.empty() && s2.empty() ? true : false;
    }
};

Java版:

class MyQueue {
    // Push element x to the back of queue.
    Stack<Integer> s1 = new Stack<>();
    Stack<Integer> s2 = new Stack<>();
    public void push(int x) {
        s1.push(x);
    }

    // Removes the element from in front of queue.
    public void pop() {
        if(s2.empty()) {
            while(!s1.empty()) 
                s2.push(s1.pop());
        }
        if(!s2.empty())
            s2.pop();
    }

    // Get the front element.
    public int peek() {
        if(s2.empty()) {
            while(!s1.empty()) 
                s2.push(s1.pop());
        }
        if(!s2.empty())
            return s2.peek();
        return -1;
    }

    // Return whether the queue is empty.
    public boolean empty() {
        return s1.empty() && s2.empty() ? true : false;
    }
}

Python版:

class Queue(object):
    def __init__(self):
        """
        initialize your data structure here.
        """
        self.s1, self.s2 = [], []

    def push(self, x):
        """
        :type x: int
        :rtype: nothing
        """
        self.s1.append(x)

    def pop(self):
        """
        :rtype: nothing
        """
        if len(self.s2) == 0:
            while len(self.s1) != 0:
                self.s2.append(self.s1[-1])
                self.s1.pop()
        if len(self.s2) != 0:
            self.s2.pop()

    def peek(self):
        """
        :rtype: int
        """
        if len(self.s2) == 0:
            while len(self.s1) != 0:
                self.s2.append(self.s1[-1])
                self.s1.pop()
        if len(self.s2) != 0:
            return self.s2[-1]       
        return None
        
    def empty(self):
        """
        :rtype: bool
        """
        if len(self.s1) == 0 and len(self.s2) == 0:
            return True
        return False

你可能感兴趣的:(Algorithm,LeetCode,面试题)