Last time, we learned how to shift / remove a node from the beginning of our Singly Linked List.
Today, we learn how to get any specific node by its index.
We start with the code after we added push()
, because we want to keep the code as simple as possible to understand. We need push()
to add some nodes to the List.
class Node {
constructor(value) {
this.value = value;
this.next = null;
}
}
class SinglyLinkedList {
constructor() {
this.length = 0;
this.head = null;
this.tail = null;
}
push(value) {
const newNode = new Node(value);
if (this.length > 0) {
this.tail.next = newNode;
} else {
this.head = newNode;
}
this.tail = newNode;
this.length += 1;
return newNode;
}
}
First, we should think about the constraints and possibilities:
If the index is negative or equal to or greater than the length of the List:
Else:
Examples:
head
Differences:
class Node {
constructor(value) {
this.value = value;
this.next = null;
}
}
class SinglyLinkedList {
constructor() {
this.length = 0;
this.head = null;
this.tail = null;
}
push(value) {
const newNode = new Node(value);
if (this.length > 0) {
this.tail.next = newNode;
} else {
this.head = newNode;
}
this.tail = newNode;
this.length += 1;
return newNode;
}
get(index) {
// return null if index is negative or equal to or greater than the length of the List
if (index < 0 || index >= this.length) {
return null;
} else {
// start at the beginning of the List
let currentNode = this.head;
// keep track how many times we went to the next node
let count = 0;
// as long as the current count is smaller than the desired node's index
while (count < index) {
// set the next node as the currentNode
currentNode = currentNode.next;
// increase the count by 1
count += 1;
}
// return this node
return currentNode;
}
}
}
Let’s have a look how to use the Singly Linked List’s get
method and its results.
const newSLL = new SinglyLinkedList();
// show List, should be empty
console.log(newSLL);
// SinglyLinkedList { length: 0, head: null, tail: null }
// add three nodes
newSLL.push("0");
newSLL.push("1");
newSLL.push("2");
// there is no node with a negative index
console.log(newSLL.get(-1));
// null
// there is no node with that high of an index
console.log(newSLL.get(3));
// null
// show me the first node
console.log(newSLL.get(0));
// Node {
// value: '0',
// next: Node { value: '1', next: Node { value: '2', next: null } }
// }
// show me the second node
console.log(newSLL.get(1));
// Node { value: '1', next: Node { value: '2', next: null } }
// show me the third node
console.log(newSLL.get(2));
// Node { value: '2', next: null }
We will implement how to give a specific node a new value. If you want to be notified, subscribe :)
Hi! I'm Michael 👋 I'm a Mentor & Senior Web Developer - I help you to reach your (career) goals.