-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathqueue.ts
53 lines (42 loc) · 881 Bytes
/
queue.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
class NodeItem<T = any> {
value: T;
next: NodeItem<T> | null;
constructor(value: NodeItem['value']) {
this.value = value;
this.next = null;
}
}
export default class Queue<T = any> {
head: NodeItem<T> | null;
tail: NodeItem<T> | null;
length: number;
constructor() {
this.head = null;
this.tail = null;
this.length = 0;
}
enqueue(value: T) {
let newNode = new NodeItem(value);
if (!this.tail) {
this.head = newNode;
this.tail = newNode;
} else {
this.tail.next = newNode;
this.tail = newNode;
}
return ++this.length;
}
dequeue(): T | null {
if (!this.head) return null;
let currentHead = this.head;
this.head = this.head.next;
if (!this.head) {
this.tail = null;
}
this.length--;
return currentHead.value;
}
peak() {
return this.head;
}
}