494. implement stack by two queues

explanation

  1. 用两个queue实现一个stack
  2. 一个queue 用来装item, 另一个queue用来在找最后一个item的时候,存储上面的item。

code

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
public class  {

* @param x: An integer
* @return: nothing
*/
private Queue<Integer> queue1;
private Queue<Integer> queue2;
public () {
queue1 = new LinkedList<Integer>();
queue2 = new LinkedList<Integer>();
}

private void moveItem(Queue<Integer> que1, Queue<Integer> que2) { // 其实这个也不用传参
while (que1.size() > 1) {
que2.offer(que1.poll());
}
}
private void swap() { // 不能通过传参实现!!!pass by value
Queue<Integer> temp = queue2;
queue2 = queue1;
queue1 = temp;
}
public void push(int x) {
// write your code here
queue1.offer(x);
}


* @return: nothing
*/
public void pop() {
// write your code here
// queue 1 to queue 2 except last item
moveItem(queue1, queue2);
// get last item
int result = queue1.poll();
// queue2 and queue 1 exchange
swap();
}


* @return: An integer
*/
public int top() {
// write your code here
//queue 1 to queue 2 except last item
moveItem(queue1, queue2);
// get last item
int result = queue1.poll();
// put last item to queue 2
queue2.offer(result);
// queue 2 and queue 1 exchange
swap();
return result;
}


* @return: True if the stack is empty
*/
public boolean isEmpty() {
// write your code here
// queue1.isEmpty
return queue1.isEmpty();
}
}

complexity

  1. time: push O(1), pop O(n), top O(n), isEmpty O(1)
  2. space : O(n)