LeetCode225. Implement Stack using Queues

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.

Example:

MyStack stack = new MyStack();

stack.push(1);
stack.push(2);  
stack.top();   // returns 2
stack.pop();   // returns 2
stack.empty(); // returns false

Notes:

  • You must use only standard operations of a queue -- which means only push to backpeek/pop from frontsize, and is empty operations are valid.
  • Depending on your language, queue may not be supported natively. You may simulate a queue by using a list or deque (double-ended queue), as long as you use only standard operations of a queue.
  • You may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack).

思路:

这道题的关键在于利用两个queue之间的中转来模拟stack的功能:我们再push的时候正常push,再pop的时候先将一个queue中的前面n-1个元素全部放入另一个queue中,然后输出最后一个元素。

class MyStack {
public:
public:
	/** Initialize your data structure here. */
	MyStack() {

	}

	/** Push element x onto stack. */
	void push(int x) {
		q.push(x);
	}

	/** Removes the element on top of the stack and returns that element. */
	int pop() {
		queue<int> tmpQ;
		while(q.size() > 1) {
			tmpQ.push(q.front());
			q.pop();
		}
		int res = q.front();
		q = tmpQ;
		return res;
	}

	/** Get the top element. */
	int top() {
		queue<int> tmpQ;
		int res = 0;
		while(!q.empty()) {
			res = q.front();
			tmpQ.push(q.front());
			q.pop();
		}
		q = tmpQ;
		return res;
	}

	/** Returns whether the stack is empty. */
	bool empty() {
		return q.empty();
	}
private:
	queue<int> q;
};

/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack* obj = new MyStack();
 * obj->push(x);
 * int param_2 = obj->pop();
 * int param_3 = obj->top();
 * bool param_4 = obj->empty();
 */

猜你喜欢

转载自blog.csdn.net/m0_37518259/article/details/89477889