Design Front Middle Back Queue LeetCode solution in C++

1
class FrontMiddleBackQueue {
2
public:
3
deque<int> list1;
4
deque<int> list2;
5
int size;
6

7
FrontMiddleBackQueue() {
8
size = 0;
9
}
10

11
void pushFront(int val) {
12
if (list1.size() - list2.size() == 0) {
13
list1.push_front(val);
14
} else {
15
list1.push_front(val);
16
list2.push_front(list1.back());
17
list1.pop_back();
18
}
19

20
size++;
21
}
22

23
void pushMiddle(int val) {
24
if (list1.size() - list2.size() == 0) {
25
list1.push_back(val);
26
} else {
27
list2.push_front(list1.back());
28
list1.pop_back();
29
list1.push_back(val);
30
}
31

32
size++;
33
}
34

35
void pushBack(int val) {
36
if (list1.size() - list2.size() == 0) {
37
list2.push_back(val);
38
list1.push_back(list2.front());
39
list2.pop_front();
40
} else {
41
list2.push_back(val);
42
}
43

44
size++;
45
}
46

47
int popFront() {
48
if (size == 0) return -1;
49

50
int val = list1.front();
51
list1.pop_front();
52

53
if (list1.size() < list2.size()) {
54
list1.push_back(list2.front());
55
list2.pop_front();
56
}
57

58
size--;
59
return val;
60
}
61

62
int popMiddle() {
63
if (size == 0) return -1;
64

65
int val = list1.back();
66
list1.pop_back();
67

68
if (list1.size() < list2.size()) {
69
list1.push_back(list2.front());
70
list2.pop_front();
71
}
72

73
size--;
74
return val;
75
}
76

77
int popBack() {
78
if (size == 0) return -1;
79

80
int val;
81
if (size == 1) {
82
val = list1.front();
83
list1.pop_front();
84
} else {
85
val = list2.back();
86
list2.pop_back();
87

88
int s1 = list1.size();
89
int s2 = list2.size();
90

91
if (list1.size() - list2.size() > 1) {
92
list2.push_front(list1.back());
93
list1.pop_back();
94
}
95
}
96

97
size--;
98
return val;
99
}
100
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0