225. Implement Stack using Queues

  • 31.7%

https://leetcode.com/problems/implement-stack-using-queues/#/description

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.

Notes:

  • You must use only standard operations of a queue – which means only push to back, peek/pop from front, size, 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).

方法一:

使用一个队列,当push时,push进去,然后将队列中前面的都放到新来的后面,这样将来top货pop时,就可以只用调用front和pop函数了。

注意queue的函数,包括front,pop,push,size等。尤其注意可以用size()函数。

剑指 offer第7题

我的代码实现:

Oct 10th, 2017

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class MyStack {
public:
queue<int> que;
/** Initialize your data structure here. */
MyStack() {
}

/** Push element x onto stack. */
void push(int x) {
que.push(x);
int n = que.size();
for(int i=0; i<n-1; i++){
int val = que.front();
que.pop();
que.push(val);
}
}

/** Removes the element on top of the stack and returns that element. */
int pop() {
int val = que.front();
que.pop();
return val;
}

/** Get the top element. */
int top() {
return que.front();
}

/** Returns whether the stack is empty. */
bool empty() {
return que.empty();
}
};

/**
* 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();
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class MyStack {
queue<int> que;
public:
/** Initialize your data structure here. */
MyStack() {

}

/** Push element x onto stack. */
void push(int x) {
que.push(x);
for(int i=0; i<que.size()-1; i++){
que.push(que.front());
que.pop();
}
}

/** Removes the element on top of the stack and returns that element. */
int pop() {
int val = que.front();
que.pop();
return val;
}

/** Get the top element. */
int top() {
return que.front();
}

/** Returns whether the stack is empty. */
bool empty() {
return que.empty();
}
};

0ms, 11.57%, 20 July 2016

https://discuss.leetcode.com/topic/19227/a-simple-c-solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Stack {
public:
queue<int> que;
// Push element x onto stack.
void push(int x) {
que.push(x);
for(int i=0; i<que.size()-1; ++i){
que.push(que.front());
que.pop();
}
}

// Removes the element on top of the stack.
void pop() {
que.pop();
}

// Get the top element.
int top() {
return que.front();
}

// Return whether the stack is empty.
bool empty() {
return que.empty();
}
};

谢谢你,可爱的朋友。