-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathImplementStackUsingQueues.java
More file actions
144 lines (120 loc) · 3.13 KB
/
Copy pathImplementStackUsingQueues.java
File metadata and controls
144 lines (120 loc) · 3.13 KB
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
// Source : https://leetcode.com/problems/implement-stack-using-queues/
// Author : cornprincess
// Date : 2020-03-10
/*****************************************************************************************************
*
* 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 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).
*
******************************************************************************************************/
package ImplementStackUsingQueues;
import java.util.LinkedList;
import java.util.Queue;
class MyStack {
private Queue<Integer> q1 = new LinkedList<>();
public MyStack() {
}
public void push(int x) {
q1.add(x);
int sz = q1.size();
while (sz > 1) {
q1.add(q1.remove());
sz--;
}
}
public int pop() {
return q1.remove();
}
public int top() {
return q1.peek();
}
public boolean empty() {
return q1.isEmpty();
}
}
class MyStack2 {
private Queue<Integer> q1 = new LinkedList<>();
private Queue<Integer> q2 = new LinkedList<>();
private int top;
public MyStack2() {
}
// Time complexity: O(1)
public void push(int x) {
q1.add(x);
top = x;
}
// Time complexity: O(n)
public int pop() {
while (q1.size() > 1) {
top = q1.remove();
q2.add(top);
}
int pop = q1.remove();
Queue<Integer> temp = q1;
q1 = q2;
q2 = temp;
return pop;
}
public int top() {
return top;
}
public boolean empty() {
return q1.isEmpty();
}
}
class MyStack3 {
private Queue<Integer> q1 = new LinkedList<>();
private Queue<Integer> q2 = new LinkedList<>();
private int top;
public MyStack3() {
}
// Time complexity: O(n)
public void push(int x) {
q2.add(x);
top = x;
while (!q1.isEmpty()) {
q2.add(q1.remove());
}
Queue<Integer> temp = q1;
q1 = q2;
q2 = temp;
}
// Time complexity: O(1)
public int pop() {
int pop = q1.remove();
if (!q1.isEmpty()) {
top = q1.peek();
}
return pop;
}
public int top() {
return top;
}
public boolean empty() {
return q1.isEmpty();
}
}