Learn advanced linked list operations including insertion and deletion at specific positions.
class Node {
int value;
Node next;
Node(int value) {
this.value = value;
this.next = null;
}
}
class LinkedList {
Node head;
int length;
public LinkedList() {
this.head = null;
this.length = 0;
}
// Add a node to the end of the list
public void append(int value) {
Node newNode = new Node(value);
length++;
if (head == null) {
head = newNode;
return;
}
Node current = head;
while (current.next != null) {
current = current.next;
}
current.next = newNode;
}
// Insert a node at a specific position
public boolean insertAtPosition(int position, int value) {
if (position < 0 || position > length) {
return false;
}
Node newNode = new Node(value);
if (position == 0) {
newNode.next = head;
head = newNode;
length++;
return true;
}
Node current = head;
Node previous = null;
int index = 0;
while (index < position) {
previous = current;
current = current.next;
index++;
}
newNode.next = current;
previous.next = newNode;
length++;
return true;
}
}
LinkedList 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
public Integer removeAtPosition(int position) {
if (head == null || position < 0 || position >= length) {
return null;
}
Node removedNode;
if (position == 0) {
removedNode = head;
head = head.next;
length--;
return removedNode.value;
}
Node current = head;
Node previous = null;
int index = 0;
while (index < position) {
previous = current;
current = current.next;
index++;
}
removedNode = current;
previous.next = current.next;
length--;
return removedNode.value;
}
}
LinkedList list = new LinkedList();
list.append(1);
list.append(2);
list.append(3);
list.append(4);
// Remove node at position 2 (value 3)
Integer removed = list.removeAtPosition(2);
System.out.println(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
public void reverse() {
// Your code here
}
}
Implement a method to find the middle node of a linked list using only one pass.
class LinkedList {
// ... previous methods
public Node findMiddle() {
// Your code here
return null;
}
}
If you want more practice with linked lists, check out these LeetCode problems: