Skip to content

Commit 9822c9e

Browse files
authored
Create 1670-design-front-middle-back-queue.js
1 parent 63df004 commit 9822c9e

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed
+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
2+
const FrontMiddleBackQueue = function() {
3+
this.arr = []
4+
};
5+
6+
/**
7+
* @param {number} val
8+
* @return {void}
9+
*/
10+
FrontMiddleBackQueue.prototype.pushFront = function(val) {
11+
this.arr.unshift(val)
12+
};
13+
14+
/**
15+
* @param {number} val
16+
* @return {void}
17+
*/
18+
FrontMiddleBackQueue.prototype.pushMiddle = function(val) {
19+
const len = this.arr.length
20+
const mid = Math.floor(len / 2)
21+
this.arr.splice(mid, 0, val)
22+
};
23+
24+
/**
25+
* @param {number} val
26+
* @return {void}
27+
*/
28+
FrontMiddleBackQueue.prototype.pushBack = function(val) {
29+
this.arr.push(val)
30+
};
31+
32+
/**
33+
* @return {number}
34+
*/
35+
FrontMiddleBackQueue.prototype.popFront = function() {
36+
const tmp = this.arr.shift()
37+
return tmp == null ? -1 : tmp
38+
};
39+
40+
/**
41+
* @return {number}
42+
*/
43+
FrontMiddleBackQueue.prototype.popMiddle = function() {
44+
const len = this.arr.length
45+
const mid = len % 2 === 0 ? Math.floor(len / 2) - 1 : ((len / 2) >> 0)
46+
if(len === 2) return this.arr.shift()
47+
const [tmp] = this.arr.splice(mid, 1)
48+
return tmp == null ? -1 : tmp
49+
};
50+
51+
/**
52+
* @return {number}
53+
*/
54+
FrontMiddleBackQueue.prototype.popBack = function() {
55+
const tmp = this.arr.pop()
56+
return tmp == null ? -1 : tmp
57+
};
58+
59+
/**
60+
* Your FrontMiddleBackQueue object will be instantiated and called as such:
61+
* var obj = new FrontMiddleBackQueue()
62+
* obj.pushFront(val)
63+
* obj.pushMiddle(val)
64+
* obj.pushBack(val)
65+
* var param_4 = obj.popFront()
66+
* var param_5 = obj.popMiddle()
67+
* var param_6 = obj.popBack()
68+
*/

0 commit comments

Comments
 (0)