-
-
Save bradtraversy/c38f029e5f9e56a19c393d3a3b1e1544 to your computer and use it in GitHub Desktop.
// Construct Single Node | |
class Node { | |
constructor(data, next = null) { | |
this.data = data; | |
this.next = next; | |
} | |
} | |
// Create/Get/Remove Nodes From Linked List | |
class LinkedList { | |
constructor() { | |
this.head = null; | |
this.size = 0; | |
} | |
// Insert first node | |
insertFirst(data) { | |
this.head = new Node(data, this.head); | |
this.size++; | |
} | |
// Insert last node | |
insertLast(data) { | |
let node = new Node(data); | |
let current; | |
// If empty, make head | |
if (!this.head) { | |
this.head = node; | |
} else { | |
current = this.head; | |
while (current.next) { | |
current = current.next; | |
} | |
current.next = node; | |
} | |
this.size++; | |
} | |
// Insert at index | |
insertAt(data, index) { | |
// If index is out of range | |
if (index > 0 && index > this.size) { | |
return; | |
} | |
// If first index | |
if (index === 0) { | |
this.insertFirst(data); | |
return; | |
} | |
const node = new Node(data); | |
let current, previous; | |
// Set current to first | |
current = this.head; | |
let count = 0; | |
while (count < index) { | |
previous = current; // Node before index | |
count++; | |
current = current.next; // Node after index | |
} | |
node.next = current; | |
previous.next = node; | |
this.size++; | |
} | |
// Get at index | |
getAt(index) { | |
let current = this.head; | |
let count = 0; | |
while (current) { | |
if (count == index) { | |
console.log(current.data); | |
} | |
count++; | |
current = current.next; | |
} | |
return null; | |
} | |
// Remove at index | |
removeAt(index) { | |
if (index > 0 && index > this.size) { | |
return; | |
} | |
let current = this.head; | |
let previous; | |
let count = 0; | |
// Remove first | |
if (index === 0) { | |
this.head = current.next; | |
} else { | |
while (count < index) { | |
count++; | |
previous = current; | |
current = current.next; | |
} | |
previous.next = current.next; | |
} | |
this.size--; | |
} | |
// Clear list | |
clearList() { | |
this.head = null; | |
this.size = 0; | |
} | |
// Print list data | |
printListData() { | |
let current = this.head; | |
while (current) { | |
console.log(current.data); | |
current = current.next; | |
} | |
} | |
} | |
const ll = new LinkedList(); | |
ll.insertFirst(100); | |
ll.insertFirst(200); | |
ll.insertFirst(300); | |
ll.insertLast(400); | |
ll.insertAt(500, 3); | |
// ll.clearList(); | |
// ll.getAt(2); | |
ll.printListData(); |
at line 46 I think if condition should be if (index< 0 | | index > this.size) return ;
I think it should be if (index < 0 && index > this.size) return;
No, it should be "||". He was correct.
Great explanation @bradtraversy , I agree with @DeveloperShad that it should "||"
at line 46 I think if condition should be if (index< 0 | | index > this.size) return ;
Agreed,
Also, I think that should apply to 'removeIndex()' and 'getAt()' as well
In the line no 69,70 we are just making changes/adding to the local variable current
and previous
but i was wondering how these changes are added to this.head
. If any one can explain me this ?
In the line no 69,70 we are just making changes/adding to the local variable
current
andprevious
but i was wondering how these changes are added tothis.head
. If any one can explain me this ?
I think becausein line 60 we setting current
to LinkedList.head
.
I think it should be if (index < 0 && index > this.size) return;