Linked list examples
These examples define nodes and a linked list, then demonstrate appending, insertion after a known node, removal, and traversal.
Python
class Node:
def __init__(self, value):
self.value = value
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def append(self, value):
new_node = Node(value)
if self.head is None:
self.head = new_node
return
current = self.head
while current.next is not None:
current = current.next
current.next = new_node
def insert_after(self, target, value):
current = self.head
while current is not None:
if current.value == target:
new_node = Node(value)
new_node.next = current.next
current.next = new_node
return
current = current.next
raise ValueError(f"node {target} was not found")
def remove(self, value):
previous = None
current = self.head
while current is not None:
if current.value == value:
if previous is None:
self.head = current.next
else:
previous.next = current.next
return current.value
previous = current
current = current.next
raise ValueError(f"node {value} was not found")
def values(self):
result = []
current = self.head
while current is not None:
result.append(current.value)
current = current.next
return result
def print_label_value(label, value):
print(f"\033[1;36m{label}:\033[0m {value}")
def state(linked_list):
return " -> ".join(linked_list.values())
reports = LinkedList()
reports.append("GS-2042")
reports.append("GS-2043")
print_label_value("1. After append", state(reports))
reports.insert_after("GS-2042", "GS-2044")
print_label_value("2. After insertion", state(reports))
print_label_value("3. Remove node", reports.remove("GS-2043"))
print_label_value("4. Traverse", state(reports))
JavaScript
class Node {
constructor(value) {
this.value = value;
this.next = null;
}
}
class LinkedList {
constructor() {
this.head = null;
}
append(value) {
const newNode = new Node(value);
if (this.head === null) {
this.head = newNode;
return;
}
let current = this.head;
while (current.next !== null) {
current = current.next;
}
current.next = newNode;
}
insertAfter(target, value) {
let current = this.head;
while (current !== null) {
if (current.value === target) {
const newNode = new Node(value);
newNode.next = current.next;
current.next = newNode;
return;
}
current = current.next;
}
throw new Error(`node ${target} was not found`);
}
remove(value) {
let previous = null;
let current = this.head;
while (current !== null) {
if (current.value === value) {
if (previous === null) {
this.head = current.next;
} else {
previous.next = current.next;
}
return current.value;
}
previous = current;
current = current.next;
}
throw new Error(`node ${value} was not found`);
}
values() {
const result = [];
let current = this.head;
while (current !== null) {
result.push(current.value);
current = current.next;
}
return result;
}
}
function printLabelValue(label, value) {
console.log(`\x1b[1;36m${label}:\x1b[0m`, value);
}
function state(linkedList) {
return linkedList.values().join(" -> ");
}
const reports = new LinkedList();
reports.append("GS-2042");
reports.append("GS-2043");
printLabelValue("1. After append", state(reports));
reports.insertAfter("GS-2042", "GS-2044");
printLabelValue("2. After insertion", state(reports));
printLabelValue("3. Remove node", reports.remove("GS-2043"));
printLabelValue("4. Traverse", state(reports));
Expected output
1. After append: GS-2042 -> GS-2043
2. After insertion: GS-2042 -> GS-2044 -> GS-2043
3. Remove node: GS-2043
4. Traverse: GS-2042 -> GS-2044