Linked Structures
Build a Singly Linked List
Construct a singly linked list by allocating one node per value and
chaining next references. Establishes the node + head + tail model used
by every later linked-list lesson.
Algorithm
Canonical input [10, 20, 30, 40] builds the chain
head -> 10 -> 20 -> 30 -> 40 -> null with one node appended per step.
Basic Implementation
basic.php
<?php
$values = [10, 20, 30, 40];
$nodes = [];
$head = -1;
$tail = -1;
$i = 0;
while ($i < count($values)) {
$idx = count($nodes);
$nodes[] = ["value" => $values[$i], "next_idx" => -1];
if ($head == -1) {
$head = $idx;
} else {
$nodes[$tail]["next_idx"] = $idx;
}
$tail = $idx;
$i = $i + 1;
}
$cur = $head;
while ($cur != -1) {
echo $nodes[$cur]["value"] . " -> ";
$cur = $nodes[$cur]["next_idx"];
}
echo "null\n";
Complexity
- Time: O(n) with a tail pointer
- Space: O(n) for the chain
Implementation notes
- PHP: a tiny associative-array node
["value" => ..., "next_idx" => ...]stored in a plain indexed-array$nodesarena. The integernext_idxfield with-1as the sentinel is the explicit "end-of-list" marker and lets the$head/$tailpointers update the chain without leaning on PHP'sSplDoublyLinkedListor an object reference graph. - The replay never shows runtime references; nodes are labelled
node(<value>)and the chain view is rendered as10 -> 20 -> ... -> null. - The arena is collected by PHP's reference-counted GC at scope exit, so the build step stays focused on wiring without an explicit free walk.
node chain
Each node carries a `value` and a `next_idx` index into the node arena (`-1` is the end-of-list sentinel).