-
Notifications
You must be signed in to change notification settings - Fork 0
/
singlyLinkedList.js
133 lines (119 loc) · 3.18 KB
/
singlyLinkedList.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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
// implement a linked list and traverse it
class Node{
constructor(val){
this.val = val;
this.next = null;
}
}
class SinglyLinkedList{
constructor(){
this.head = null;
this.tail = null;
this.length = 0;
}
push(val){
let newNode = new Node(val);
if(!this.head){
this.head = newNode;
this.tail = newNode;
} else {
this.tail.next = newNode;
newNode.prev = this.tail;
this.tail = newNode;
}
this.length++;
return this;
}
traverse(){
let current = this.head;
// while(current){
// console.log(current.val);
// current = current.next;
// }
for(let i = 0; i < this.length; i++){
console.log(current.val);
current = current.next;
}
}
//remove a node from the end of the linked list
pop(){
if(!this.head) return null;
let current = this.head;
let newTail = current;
while(current.next){
newTail = current;
current = current.next;
}
this.tail = newTail;
newTail.next = null;
if(this.length === 0){
this.head = null;
this.tail = null;
}
this.length--;
console.log(current);
}
//remove the node from the beginning
shift(){
if(!this.head) return undefined;
let removingNode = this.head;
this.head = removingNode.next;
removingNode.next = null;
this.length--;
if(this.length === 0){
this.tail = null;
}
console.log(removingNode);
}
//adding a new node to the beginning of the linked list
unshift(val){
let newNode = new Node(val);
if(!this.head){
this.head = newNode;
this.tail = this.head;
} else{
newNode.next = this.head;
this.head = newNode;
}
this.length++;
return this;
}
// retriving a node by it's position in the linked list
get(index){
if(index < 0 || index >= this.length) return undefined;
let count = 0;
let current = this.head;
while(index != count){
current = current.next;
count++;
}
console.log(current);
}
// updating at exsiting node
set(index, val){
let foundNode = this.get(index);
if(foundNode){
foundNode.val = val;
return true;
}
return false;
}
//adding entire new node to the linked list at a specific position
insert(index, val){
let newNode = new Node(val);
if(index < 0 || index > this.length) return undefined;
if(index === this.length ) return this.push(val);
if(index === 0) return this.unshift(val);
let prevNode = this.get(index-1);
let temp = prev.next;
newNode.next = temp;
this.length++;
return true;
}
}
let list = new SinglyLinkedList();
list.push('one');
list.push('two');
list.push('three');
list.push('four');
list.get(2);