Design Front Middle Back Queue LeetCode solution in Java

1
class FrontMiddleBackQueue {
2

3
Deque<Integer> dq1, dq2;
4

5
public FrontMiddleBackQueue() {
6
dq1 = new ArrayDeque<Integer>();
7
dq2 = new ArrayDeque<Integer>();
8
}
9

10
public void pushFront(int val) {
11
dq1.addFirst(val);
12
}
13

14
public void pushBack(int val) {
15
dq2.addLast(val);
16
}
17

18
public void pushMiddle(int val) {
19
while (dq1.size() + 1 < dq2.size()) dq1.addLast(dq2.removeFirst());
20
while (dq1.size() > dq2.size()) dq2.addFirst(dq1.removeLast());
21
dq1.addLast(val);
22
}
23

24
public int popFront() {
25
if (!dq1.isEmpty()) return dq1.removeFirst();
26
if (!dq2.isEmpty()) return dq2.removeFirst();
27
return -1;
28
}
29

30
public int popMiddle() {
31
if (dq1.isEmpty() && dq2.isEmpty()) return -1;
32
while (dq1.size() < dq2.size()) dq1.addLast(dq2.removeFirst());
33
while (dq1.size() > dq2.size() + 1) dq2.addFirst(dq1.removeLast());
34
return !dq1.isEmpty() ? dq1.removeLast() : dq2.removeFirst();
35
}
36

37
public int popBack() {
38
if (!dq2.isEmpty()) return dq2.removeLast();
39
if (!dq1.isEmpty()) return dq1.removeLast();
40
return -1;
41
}
42
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0