Skip to content

Commit 2dfa0a0

Browse files
committed
Implement stack using two queues
1 parent 2e72f06 commit 2dfa0a0

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

StackUsingQueues.js

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
// Implement A Stack Using Two Queues
2+
3+
class Stack {
4+
constructor() {
5+
this.queue1 = new Queue();
6+
this.queue2 = new Queue();
7+
}
8+
push(val) {
9+
this.queue1.enqueue(val);
10+
return this;
11+
}
12+
pop() {
13+
if (!this.queue1.size) return null;
14+
15+
while (this.queue1.size > 1) {
16+
const value = this.queue1.dequeue();
17+
this.queue2.enqueue(value);
18+
}
19+
let removed = this.queue1.dequeue();
20+
21+
// swap queue1 and queue2;
22+
const temp = this.queue2;
23+
this.queue2 = this.queue1;
24+
this.queue1 = temp;
25+
26+
return removed;
27+
}
28+
}
29+
30+
// QUEUE AND NODE HAVE BEEN IMPLEMENTED FOR YOU
31+
32+
class Node {
33+
constructor(value) {
34+
this.value = value;
35+
this.next = null;
36+
}
37+
}
38+
39+
class Queue {
40+
constructor() {
41+
this.first = null;
42+
this.last = null;
43+
this.size = 0;
44+
}
45+
enqueue(data) {
46+
var node = new Node(data);
47+
48+
if (!this.first) {
49+
this.first = node;
50+
this.last = node;
51+
} else {
52+
this.last.next = node;
53+
this.last = node;
54+
}
55+
56+
return ++this.size;
57+
}
58+
59+
dequeue() {
60+
if (!this.first) return null;
61+
62+
var temp = this.first;
63+
if (this.first == this.last) {
64+
this.last = null;
65+
}
66+
this.first = this.first.next;
67+
this.size--;
68+
return temp.value;
69+
}
70+
}

0 commit comments

Comments
 (0)