-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlinked-lists.js
More file actions
98 lines (74 loc) · 1.73 KB
/
linked-lists.js
File metadata and controls
98 lines (74 loc) · 1.73 KB
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
//DATA STRUCTURES: LINKED LISTS//
/////////////////////////////////////////////////////////
class Item {
next = null;
value = null;
constructor(value) {
this.value = value;
}
}
class LinkedList {
#head = null;
#tail = null;
append = (value) => {
const item = new Item(value);
if (!this.#head) {
this.#head = item;
this.#tail = item;
return;
}
this.#tail.next = item;
this.#tail = item;
}
size = () => {
let count = 1;
let item = this.#head;
if (!item) return 0;
while (item = item.next) {
count++;
}
return count;
}
find = (value) => {
let count = 1;
let item = this.#head;
if (!item) return null;
while (item = item.next) {
if (item.value === value) {
return item;
}
}
return null;
}
insert = (index, value) => {
//check for out-of-bounds values
if (index < 0 || index > this.size()) return;
const node = new Item(value);
let current = this.#head;
let previous;
if (index === 0) { //first position
node.next = current;
this.#head = node;
} else {
let i = 0;
while (i++ < index) {
previous = current;
current = current.next;
}
node.next = current;
previous.next = node;
}
}
}
//Another type of linked list is the double linked list. It contains a link to the previous element as well as the next.
////////////////////////////////////////////////////////
//Examples:
const list = new LinkedList();
console.log(list.size());
list.append(1);
list.append(2);
list.append(3);
console.log(list.size());
console.log(list.find(2));
list.insert(2, "a")
console.log(list.size());