Data Structures - Linked List
Introduction
A Linked List is a data structure. It contains contains nodes that are connected to each other, similar to train that has carriages connected.
Arrays offer similar functionality and you are better off using them in JavScript, however as a master of your craft, knowing about Linked Lists will help you in both interviews as well as the rare situation where you’d need to implement one.
How it works
A linked list contains a head (start) node. Additional nodes are then connected one after each other. Each node contains information of the node that is connected to it.
We can insert a node at the start of the list, or the end of the list.
Example
Below is an example of a Linked List implemented in JavaScript using classes.
class Node {
key;
data;
next;
constructor(key, data) {
this.key = key;
this.data = data;
this.next = null;
}
}
class LinkedList {
head;
constructor(head) {
this.head = head;
}
display() {
let currentNode = this.head;
while (currentNode !== null) {
console.log(currentNode.data);
currentNode = currentNode.next;
}
}
getData() {
let currentNode = this.head;
let result = "";
while (currentNode !== null) {
result += currentNode.data + " ";
currentNode = currentNode.next;
}
return result.trim();
}
insertFirst(key, data) {
const newNode = new Node(key, data);
newNode.next = this.head;
this.head = newNode;
}
insertLast(key, data) {
const newNode = new Node(key, data);
let currentNode = this.head;
let lastNode = this.head;
while (currentNode !== null) {
if (currentNode.next) {
lastNode = currentNode.next;
}
currentNode = currentNode.next;
}
if (lastNode) {
lastNode.next = newNode;
}
}
reverse() {
let previous = null;
let current = this.head;
let next;
while (current != null) {
next = current.next;
current.next = previous;
previous = current;
current = next;
}
this.head = previous;
}
length() {
let length = 0;
for (let current = this.head; current !== null; current = current.next) {
length++;
}
return length;
}
find(key) {
let current = this.head;
// List is empty
if (current === null) {
return null;
}
while (current.key !== key) {
// Check if the last node
if (current.next === null) {
return null;
// Go to next element
} else {
current = current.next;
}
}
return current;
}
delete(key) {
let current = this.head;
let previous = null;
if (current === null) {
return null;
}
while (current.key !== key) {
if (current.next === null) {
return null;
} else {
previous = current;
current = current.next;
}
}
// Match was found
if (current === this.head) {
this.head = this.head.next;
} else {
// Bypass the current element
if (previous) {
previous.next = current.next;
}
}
return current;
}
}
const node1 = new Node("a", 5);
const node2 = new Node("b", 10);
const node3 = new Node("c", 15);
node2.next = node3;
node1.next = node2;
const list = new LinkedList(node1);
list.display();
// Logs:
// 5
// 10
// 15
list.delete("b");
// Deletes 10 from the linked list
list.display();
// Logs:
// 5
// 15
Lesson task
Knowing how to implement a Linked List is beneficial to your career as a developer. We are going to dive deeper into understanding how it works.
Goal
You will work through the Linked List to get a better understanding of how it works.
Brief
Complete the Level 1 process.
NOTE: Lesson Tasks do not get submitted on Moodle and are not assessed by tutors. They are mainly there for you to practise what you have learned in the lesson.
Level 1 process
-
Work through the Linked List code above. If you are unsure of the code at any point,
console.log
the values to get a better understanding of what is going on. -
Once you have a good understanding of the Linked List, see if you can implement the very basics of one where you are simply linking Nodes.
Additional Resources
tutorialspoint: Data Structure and Algorithms - Linked List
Geeksforgeeks: Linked List Data Structure
Stack Overflow: Would you ever implement a linked list in Javascript?