forked from knaxus/problem-solving-javascript
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
61 lines (52 loc) · 1.35 KB
/
index.js
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
54
55
56
57
58
59
60
61
/* eslint-disable class-methods-use-this */
const Node = require('./Node');
class DoublyLinkedList {
constructor() {
// head -> tail
// head <- tail
this.head = new Node(null, null, null);
this.tail = new Node(null, null, null);
this.head.next = this.tail; // head next point to tail
this.tail.previous = this.head; // tail previous point to head
this.size = 0;
}
addAtBeginning(value) {
const newNode = new Node(value, this.head, this.head.next);
this.head.next.previous = newNode;
this.head.next = newNode;
this.size += 1;
}
addAtEnd(value) {
const newNode = new Node(value, this.tail.previous, this.tail);
this.tail.previous.next = newNode;
this.tail.previous = newNode;
this.size += 1;
}
removeAtBeginning() {
this.remove(this.head.next);
this.size -= 1;
}
removeAtEnd() {
this.remove(this.tail.previous);
this.size -= 1;
}
remove(node) {
const previousNode = node.previous;
const nextNode = node.next;
previousNode.next = nextNode;
nextNode.previous = previousNode;
}
length() {
return this.size;
}
traverse() {
let address = this.head.next;
const elements = [];
while (address !== this.tail) {
elements.push(address.data);
address = address.next;
}
return elements;
}
}
module.exports = DoublyLinkedList;