当前位置:首页 > 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

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

删除节点

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

删除指定值的节点

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

双向链表的实现

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

php实现链表

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

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

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

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

相关文章

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE…

php验证码实现

php验证码实现

验证码实现方法 在PHP中实现验证码功能通常涉及生成随机字符串或数字,将其转换为图像,并通过会话(Session)进行验证。以下是几种常见的实现方式: 使用GD库生成图像验证码 GD库是PHP内置的…

php实现推送

php实现推送

PHP 实现推送功能的方法 PHP 实现推送功能可以通过多种方式完成,包括 WebSocket、Server-Sent Events (SSE)、长轮询或第三方推送服务。以下是几种常见的方法: 使用…

php实现下载

php实现下载

PHP实现文件下载 使用PHP实现文件下载可以通过设置HTTP头部信息强制浏览器下载文件而非直接打开。以下是几种常见的方法: 方法一:直接输出文件内容 $file_path = 'path/to/…

php实现伪静态

php实现伪静态

PHP 实现伪静态的方法 伪静态(URL Rewrite)是一种将动态URL转换为看似静态URL的技术,提升SEO友好性和用户体验。以下是几种常见的实现方式: 使用 Apache 的 mod_rew…

php数据库实现

php数据库实现

PHP 连接 MySQL 数据库 使用 mysqli 扩展连接 MySQL 数据库: <?php $servername = "localhost"; $username = "usernam…