单链表由节点组成,每个节点含数据域和指向下一节点的引用;PHP用Node类封装节点,LinkedList类以哨兵头节点管理链表,支持尾插、指定位置插入、按值删除、查找及toArray调试。

单链表的基本结构设计
单链表由一系列节点组成,每个节点包含两部分:数据域(data)和指针域(next),后者指向下一个节点。PHP 中没有原生指针,但可通过对象引用模拟——节点用类封装,next 属性存储对另一个节点对象的引用。
定义节点类与链表类
先定义 Node 类,再构建 LinkedList 类管理头节点、长度及常用操作:
// 节点类
class Node {<br>
public $data;<br>
public $next;<br>
<br>
public function __construct($data) {<br>
$this->data = $data;<br>
$this->next = null;<br>
}<br>
}
// 链表类(带头节点,简化边界处理)
class LinkedList {<br>
private $head;<br>
private $size;<br>
<br>
public function __construct() {<br>
$this->head = new Node(null); // 哨兵头节点,不存有效数据<br>
$this->size = 0;<br>
}<br>
}
核心操作实现
插入、删除、查找是链表基础能力,注意空链表和越界判断:
-
尾部插入:遍历到末尾节点(
$current->next === null),新建节点并挂载 -
指定位置插入:先遍历到前驱节点(索引
i-1),再调整指针:$newNode->next = $prev->next; $prev->next = $newNode; -
按值删除:遍历查找,找到后跳过该节点:
$prev->next = $current->next;,别忘了释放引用(可选) -
查找索引:从头节点后开始计数(
$current = $this->head->next),匹配则返回索引,否则返回 -1
遍历与调试技巧
打印链表内容时,避免死循环的关键是检查 $current !== null;实际开发中可用 toArray() 方法转为数组便于调试:
立即学习“PHP免费学习笔记(深入)”;
public function toArray() {<br>
$arr = [];<br>
$current = $this->head->next;<br>
while ($current !== null) {<br>
$arr[] = $current->data;<br>
$current = $current->next;<br>
}<br>
return $arr;<br>
}
测试时建议覆盖空链表、单节点、多节点、插入/删除首尾等场景,验证 $size 是否同步更新。



















