# 实战PHP数据结构基础之单链表

### 常见操作

• insert
• insertBefore
• insertAfter
• insertAtFirst
• search
• deleteFirst
• deleteLast
• delete
• reverse
• getNthNode
• ...

### PHP语言实现

``````class ListNode
{
private \$data;
private \$next;

public function __construct(string \$data)
{
\$this->data = \$data;
}

public function __get(\$var)
{
return \$this->\$var;
}

public function __set(\$var, \$val)
{
return \$this->\$var = \$val;
}
}

``````class LinkedList
{
private \$length;
}

``````/**
* 插入一个节点
* @param string|null \$data
* @return bool
* complexity O(n)
*/
public function insert(string \$data = null)
{
\$newNode = new ListNode(\$data);

} else {
while (\$currentNode->next !== null) {
\$currentNode = \$currentNode->next;
}

\$currentNode->next = \$newNode;
}

\$this->length++;
return true;
}

``````/**
* 搜索一个节点
* @param string \$data
* @return bool|ListNode
* complexity O(n)
*/
public function search(string \$data)
{
if (\$this->length > 0) {
while (\$currentNode !== null) {
if (\$currentNode->data === \$data) {
return \$currentNode;
}

\$currentNode = \$currentNode->next;
}
}

return false;
}

``````public function reverse()
{
\$reveredList = null;
\$next = null;

while (\$currentNode !== null) {
\$next = \$currentNode->next;
\$currentNode->next = \$reveredList;
\$reveredList = \$currentNode;
\$currentNode = \$next;
}

}
}

}

#### 专题系列

PHP基础数据结构专题系列目录地址：github.com/... 主要使用PHP语法总结基础的数据结构和算法。还有我们日常PHP开发中容易忽略的基础知识和现代PHP开发中关于规范、部署、优化的一些实战性建议，同时还有对Javascript语言特点的深入研究。