1
class FrontMiddleBackQueue {3
Deque<Integer> dq1, dq2;5
public FrontMiddleBackQueue() {6
dq1 = new ArrayDeque<Integer>();7
dq2 = new ArrayDeque<Integer>();10
public void pushFront(int val) {14
public void pushBack(int val) {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());24
public int popFront() {25
if (!dq1.isEmpty()) return dq1.removeFirst();26
if (!dq2.isEmpty()) return dq2.removeFirst();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();37
public int popBack() {38
if (!dq2.isEmpty()) return dq2.removeLast();39
if (!dq1.isEmpty()) return dq1.removeLast();