📜  我们可以在 php 中创建链表吗(1)

📅  最后修改于: 2023-12-03 15:39:38.290000             🧑  作者: Mango

在 PHP 中创建链表

链表是一种常见的数据结构,它在计算机科学中广泛应用。链表是由节点组成的数据对象序列,其中每个节点包含一个值和一个指向下一个节点的指针。在 PHP 中,我们可以使用类来创建链表。

实现一个节点类

我们首先要实现一个表示节点的类。节点应该具有一个值和一个指向下一个节点的指针。下面是一个简单的节点类示例:

class Node {
    public $value;
    public $next;

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

在这个类中,我们定义了一个 $value 属性用于存储节点的值,还定义了一个 $next 属性用于指向链表中的下一个节点。我们还实现了一个构造函数来初始化节点值和下一个节点指针。

实现一个链表类

接下来,我们要实现一个表示链表的类。链表类应该具有一个指向链表头部的指针,并且应该能够添加、删除和遍历节点。下面是一个简单的链表类示例:

class LinkedList {
    public $head;

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

    public function add($value) {
        $node = new Node($value);

        if ($this->head === null) {
            $this->head = $node;
        } else {
            $current = $this->head;

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

            $current->next = $node;
        }
    }

    public function remove($value) {
        if ($this->head === null) {
            return;
        }

        if ($this->head->value === $value) {
            $this->head = $this->head->next;
        } else {
            $current = $this->head;

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

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

    public function traverse() {
        $current = $this->head;

        while ($current !== null) {
            echo $current->value . " ";
            $current = $current->next;
        }
    }
}

这个类有一个 $head 属性,用于指向链表的第一个节点。它还实现了 add()remove()traverse() 方法来添加、删除和遍历节点。

使用链表类

现在我们已经实现了一个链表类,可以通过以下方式使用它:

$ll = new LinkedList();
$ll->add(10);
$ll->add(20);
$ll->add(30);
$ll->traverse(); // 输出 10 20 30
$ll->remove(20);
$ll->traverse(); // 输出 10 30

在这个例子中,我们首先创建了一个空链表。然后,我们通过 add() 方法添加了一些节点,并使用 traverse() 方法遍历整个链表。最后,我们使用 remove() 方法删除了一个节点,并再次使用 traverse() 方法遍历链表。