Learn advanced linked list operations including insertion and deletion at specific positions.
class Node {
constructor(value) {
this.value = value;
this.next = null;
}
}
class LinkedList {
constructor() {
this.head = null;
this.length = 0;
}
// Add a node to the end of the list
append(value) {
const newNode = new Node(value);
this.length++;
if (!this.head) {
this.head = newNode;
return;
}
let current = this.head;
while (current.next) {
current = current.next;
}
current.next = newNode;
}
// Insert a node at a specific position
insertAtPosition(position, value) {
// If position is out of range
if (position < 0 || position > this.length) {
return false;
}
const newNode = new Node(value);
// Insert at the beginning
if (position === 0) {
newNode.next = this.head;
this.head = newNode;
this.length++;
return true;
}
// Insert at any other position
let current = this.head;
let previous = null;
let index = 0;
while (index < position) {
previous = current;
current = current.next;
index++;
}
newNode.next = current;
previous.next = newNode;
this.length++;
return true;
}
}
const list = new LinkedList();
list.append(1);
list.append(3);
list.append(4);
// Insert 2 at position 1 (between 1 and 3)
list.insertAtPosition(1, 2);
// Output: 1 -> 2 -> 3 -> 4
class LinkedList {
// ... previous methods
// Remove a node at a specific position
removeAtPosition(position) {
// If the list is empty or position is out of range
if (!this.head || position < 0 || position >= this.length) {
return null;
}
let removedNode;
// Remove the first node
if (position === 0) {
removedNode = this.head;
this.head = this.head.next;
this.length--;
return removedNode.value;
}
// Remove node at any other position
let current = this.head;
let previous = null;
let index = 0;
while (index < position) {
previous = current;
current = current.next;
index++;
}
removedNode = current;
previous.next = current.next;
this.length--;
return removedNode.value;
}
}
const list = new LinkedList();
list.append(1);
list.append(2);
list.append(3);
list.append(4);
// Remove node at position 2 (value 3)
const removed = list.removeAtPosition(2);
console.log(removed); // 3
// Output: 1 -> 2 -> 4
Now that you've learned how to implement insertion and deletion at specific positions in a linked list, try these practice challenges:
Implement a method to reverse a linked list in-place.
class LinkedList {
// ... previous methods
reverse() {
// Your code here
}
}
Implement a method to find the middle node of a linked list using only one pass.
class LinkedList {
// ... previous methods
findMiddle() {
// Your code here
}
}
If you want more practice with linked lists, check out these LeetCode problems: