-
-
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;
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
currentandpreviousbut 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.
at line 46 I think if condition should be if (index< 0 | | index > this.size) return ;