当前位置:首页 > PHP

php实现链表

2026-04-03 06:14:13PHP

PHP 实现链表的基本方法

链表是一种常见的数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。以下是 PHP 中实现链表的几种方式。

定义链表节点类

链表的基础是节点类,每个节点包含数据(data)和指向下一个节点的指针(next)。

class ListNode {
    public $data;
    public $next;

    public function __construct($data) {
        $this->data = $data;
        $this->next = null;
    }
}

创建链表

可以通过实例化节点并链接它们来创建一个简单的链表。

$node1 = new ListNode(10);
$node2 = new ListNode(20);
$node3 = new ListNode(30);

$node1->next = $node2;
$node2->next = $node3;

遍历链表

遍历链表通常从头部开始,依次访问每个节点,直到遇到 null

php实现链表

function traverseLinkedList($head) {
    $current = $head;
    while ($current !== null) {
        echo $current->data . " ";
        $current = $current->next;
    }
}

traverseLinkedList($node1); // 输出: 10 20 30

插入节点

可以在链表的头部、中间或尾部插入节点。

头部插入

function insertAtHead(&$head, $data) {
    $newNode = new ListNode($data);
    $newNode->next = $head;
    $head = $newNode;
}

insertAtHead($node1, 5);
traverseLinkedList($node1); // 输出: 5 10 20 30

尾部插入

function insertAtTail($head, $data) {
    $newNode = new ListNode($data);
    $current = $head;
    while ($current->next !== null) {
        $current = $current->next;
    }
    $current->next = $newNode;
}

insertAtTail($node1, 40);
traverseLinkedList($node1); // 输出: 5 10 20 30 40

删除节点

可以根据值或位置删除节点。

php实现链表

删除指定值的节点

function deleteNode(&$head, $value) {
    if ($head->data === $value) {
        $head = $head->next;
        return;
    }

    $current = $head;
    while ($current->next !== null && $current->next->data !== $value) {
        $current = $current->next;
    }

    if ($current->next !== null) {
        $current->next = $current->next->next;
    }
}

deleteNode($node1, 20);
traverseLinkedList($node1); // 输出: 5 10 30 40

反转链表

反转链表可以通过迭代或递归实现。

迭代法反转

function reverseLinkedList($head) {
    $prev = null;
    $current = $head;
    while ($current !== null) {
        $next = $current->next;
        $current->next = $prev;
        $prev = $current;
        $current = $next;
    }
    return $prev;
}

$reversedHead = reverseLinkedList($node1);
traverseLinkedList($reversedHead); // 输出: 40 30 10 5

链表的常见操作

其他常见操作包括查找节点、计算链表长度、检测环等。

查找节点

function findNode($head, $value) {
    $current = $head;
    while ($current !== null) {
        if ($current->data === $value) {
            return true;
        }
        $current = $current->next;
    }
    return false;
}

echo findNode($reversedHead, 30) ? "Found" : "Not found"; // 输出: Found

计算链表长度

function getLength($head) {
    $count = 0;
    $current = $head;
    while ($current !== null) {
        $count++;
        $current = $current->next;
    }
    return $count;
}

echo getLength($reversedHead); // 输出: 4

双向链表的实现

双向链表每个节点包含指向前一个节点和后一个节点的指针。

class DoublyListNode {
    public $data;
    public $next;
    public $prev;

    public function __construct($data) {
        $this->data = $data;
        $this->next = null;
        $this->prev = null;
    }
}

以上方法涵盖了链表的基本操作,可以根据需求进一步扩展功能。

标签: 链表php
分享给朋友:

相关文章

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素…

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searchT…

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为H…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…