当前位置:首页 > PHP

php实现链表操作

2026-02-15 06:04:56PHP

PHP实现链表操作

链表是一种常见的数据结构,通过节点和指针实现动态内存分配。PHP中可以通过类和对象模拟链表操作。

定义链表节点类

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

class ListNode {
    public $data;
    public $next;

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

创建链表

实例化节点对象并连接它们形成链表。

$node1 = new ListNode(1);
$node2 = new ListNode(2);
$node3 = new ListNode(3);

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

遍历链表

使用循环访问链表中的每个节点。

php实现链表操作

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

插入节点

在链表指定位置插入新节点。

function insertNode(&$head, $data, $position) {
    $newNode = new ListNode($data);

    if ($position == 0) {
        $newNode->next = $head;
        $head = $newNode;
        return;
    }

    $current = $head;
    for ($i = 0; $i < $position - 1 && $current != null; $i++) {
        $current = $current->next;
    }

    if ($current == null) return;

    $newNode->next = $current->next;
    $current->next = $newNode;
}

删除节点

从链表中移除指定位置的节点。

php实现链表操作

function deleteNode(&$head, $position) {
    if ($head == null) return;

    if ($position == 0) {
        $head = $head->next;
        return;
    }

    $current = $head;
    for ($i = 0; $i < $position - 1 && $current != null; $i++) {
        $current = $current->next;
    }

    if ($current == null || $current->next == null) return;

    $current->next = $current->next->next;
}

反转链表

改变链表节点指针方向实现反转。

function reverseLinkedList(&$head) {
    $prev = null;
    $current = $head;

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

    $head = $prev;
}

检测环

判断链表是否有环结构。

function hasCycle($head) {
    if ($head == null) return false;

    $slow = $head;
    $fast = $head;

    while ($fast != null && $fast->next != null) {
        $slow = $slow->next;
        $fast = $fast->next->next;

        if ($slow === $fast) {
            return true;
        }
    }

    return false;
}

合并两个有序链表

将两个已排序链表合并为一个新链表。

function mergeTwoLists($l1, $l2) {
    $dummy = new ListNode(0);
    $current = $dummy;

    while ($l1 != null && $l2 != null) {
        if ($l1->data < $l2->data) {
            $current->next = $l1;
            $l1 = $l1->next;
        } else {
            $current->next = $l2;
            $l2 = $l2->next;
        }
        $current = $current->next;
    }

    $current->next = ($l1 != null) ? $l1 : $l2;

    return $dummy->next;
}

以上代码实现了链表的基本操作,包括创建、遍历、插入、删除、反转、检测环和合并等功能。可以根据实际需求调整或扩展这些方法。

标签: 链表操作
分享给朋友:

相关文章

php 链表实现

php 链表实现

在 PHP 中实现链表可以通过类来模拟链表节点(Node)和链表(LinkedList)结构。以下是链表的完整实现示例,包含基础操作如插入、删除、遍历等。 链表节点类(Node) 链表的基本单元是节…

vue操作权限实现

vue操作权限实现

Vue 权限控制实现方案 Vue 中实现权限控制通常涉及前端路由、按钮/组件级权限、接口权限等多个层面。以下是常见的实现方法: 路由权限控制 通过动态路由实现,根据用户权限过滤可访问的路由: 定…

php实现链表操作

php实现链表操作

PHP实现链表基础结构 链表由节点(Node)构成,每个节点包含数据域和指向下一个节点的指针。以下是单向链表的节点类实现: class ListNode { public $data;…

js 链表实现

js 链表实现

链表基础概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针。与数组不同,链表的内存分配不要求连续,插入和删除操作效率更高。 单向链表实现 以下是单向链表的基本…

js实现链表思路

js实现链表思路

实现链表的基本结构 链表由节点(Node)组成,每个节点包含两个部分: value:存储数据 next:指向下一个节点的引用(默认null) class Node { constru…

jquery数组操作

jquery数组操作

jQuery 数组操作 jQuery 本身并不直接提供数组操作的方法,但可以结合 JavaScript 原生数组方法和 jQuery 的实用函数来实现常见的数组操作。以下是几种常见的数组操作方法:…