-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
linked-list.js
118 lines (88 loc) · 1.82 KB
/
linked-list.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
const LinkedList = () => {
let head;
let tail;
const createNode = (value) => {
return {
value,
next: {},
};
};
const initializeList = (node) => {
head = node;
tail = head;
};
const addNode = (value) => {
const node = createNode(value);
if (!head) {
initializeList(node);
return;
}
tail.next = node;
tail = tail.next;
};
const prependNode = (value) => {
const node = createNode(value);
if (!head) {
initializeList(node);
return;
}
node.next = head;
head = node;
};
const search = (value) => {
let current = head || {};
let result;
while (!result && current) {
if (current.value === value) {
result = value;
}
current = current.next;
}
return result;
};
const traverse = (cb) => {
let current = head || {};
while (current.value) {
if (cb) cb(current);
current = current.next;
}
};
const reverseTraversal = () => {
if (!tail) return;
let current = tail.value;
while (current !== head.value) {
let prev = head;
while (prev.next.value !== current) {
prev = prev.next;
}
current = prev.value;
}
};
const getList = () => {
return { head, tail };
};
return {
search,
getList,
addNode,
prependNode,
traverse,
reverseTraversal,
};
};
const list = LinkedList();
list.addNode(1);
list.addNode(2);
console.log(list.getList());
console.log("---------- PREPEND ---------");
list.prependNode(3);
list.traverse((item) => {
console.log("the traversed node is", item);
});
console.log(list.search(2));
console.log("list:", list.getList());
console.log(
"is the same tail? ",
list.getList().head.next.next.value === list.getList().tail.value
);
list.reverseTraversal();