Design Front Middle Back Queue LeetCode solution in C++
1class FrontMiddleBackQueue {2public:3deque<int> list1;4deque<int> list2;5int size;67FrontMiddleBackQueue() {8size = 0;9}1011void pushFront(int val) {12if (list1.size() - list2.size() == 0) {13list1.push_front(val);14} else {15list1.push_front(val);16list2.push_front(list1.back());17list1.pop_back();18}1920size++;21}2223void pushMiddle(int val) {24if (list1.size() - list2.size() == 0) {25list1.push_back(val);26} else {27list2.push_front(list1.back());28list1.pop_back();29list1.push_back(val);30}3132size++;33}3435void pushBack(int val) {36if (list1.size() - list2.size() == 0) {37list2.push_back(val);38list1.push_back(list2.front());39list2.pop_front();40} else {41list2.push_back(val);42}4344size++;45}4647int popFront() {48if (size == 0) return -1;4950int val = list1.front();51list1.pop_front();5253if (list1.size() < list2.size()) {54list1.push_back(list2.front());55list2.pop_front();56}5758size--;59return val;60}6162int popMiddle() {63if (size == 0) return -1;6465int val = list1.back();66list1.pop_back();6768if (list1.size() < list2.size()) {69list1.push_back(list2.front());70list2.pop_front();71}7273size--;74return val;75}7677int popBack() {78if (size == 0) return -1;7980int val;81if (size == 1) {82val = list1.front();83list1.pop_front();84} else {85val = list2.back();86list2.pop_back();8788int s1 = list1.size();89int s2 = list2.size();9091if (list1.size() - list2.size() > 1) {92list2.push_front(list1.back());93list1.pop_back();94}95}9697size--;98return val;99}100};