链表

链表

标签(空格分隔): 数据结构和算法

理解链表

链表通过指针将一组零散的内存块串联在一起。其中,我们把内存块称为链表的“结点”。为了将所有的结点串起来,每个链表的结点除了存储数据之外,还需要记录链上的下一个结点的地址

undefined
undefined
undefined
undefined

PHP实现单链表

    <?php

class Node
{
    /**
     * 数据
     * @var $value
     */
    public $value;

    /**
     * 指向下一个节点
     * @var $next
     */
    public $next;


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

class LinkedList
{
    /**
     * Node节点
     * @var Node $head
     */
    private $head;

    /**
     * 数量
     * @var int $size
     */
    private $size;

    public function __construct()
    {
        $this->head = new Node();
        $this->size = 0;
    }

    /**
     * 头部插入数据
     * @param $value
     */
    public function addByHead($value)
    {
        $this->head->next = new Node($value, $this->head->next);
        $this->size++;
    }


    /**
     * 尾部插入数据
     * @param $value
     */
    public function addByTail($value)
    {
        $node = $this->head;
        while ($node->next != null) {
            $node = $node->next;
        }
        $node->next = new Node($value);
        $this->size++;
    }

    /**
     * 指定位置后插入
     * @param $indexValue
     * @param $value
     * @return bool
     */
    public function addByIndex($indexValue, $value)
    {
        $node = $this->head;
        while ($node->next != null) {
            $node = $node->next;
            if ($node->value == $indexValue) {
                $node->next = new Node($value, $node->next);
                return true;
            }
        }
        return false;
    }


    /**
     * 更新节点的值
     * @param $oldValue
     * @param $newValue
     * @return bool
     */
    public function update($oldValue, $newValue)
    {
        $node = $this->head;

        while ($node->next != null) {
            $node = $node->next;
            if ($node->value == $oldValue) {
                $node->value = $newValue;
                return true;
            }
        }
        return false;
    }


    /**
     * 移除节点
     * @param $value
     * @return bool
     */
    public function remove($value)
    {
        $node = $this->head;

//        $flag = null;
//        while ($node->next != null) {
//            $node = $node->next;
//            if ($node->value != $value) {
//                $flag = $node;
//            } else {
//                break;
//            }
//        }
//        var_dump($flag);die;

        while ($node->next != null && $node->next->value != $value) {
            $node = $node->next;
        }
        if ($node) {
            $node->next = $node->next->next;
            return true;
        }
        return false;
    }


    /**
     * 清空
     * @return bool
     */
    public function clear()
    {
        $this->head = null;
        $this->size = 0;
        return true;
    }


    /**
     * 是否为空
     * @return bool
     */
    public function isEmpty()
    {
        return (boolean) $this->getSize();
    }



    /**
     * @return string
     */
    public function toString()
    {
        $node = $this->head;
        $r = [];
        while($node->next != null){
            $node = $node->next;
            $r[] = $node->value;
        }
        return implode('->',$r);
    }

    /**
     * @return int
     */
    public function getSize(): int
    {
        return ($this->size);
    }
}

$linkedList = new LinkedList();
var_dump($linkedList->isEmpty());
$linkedList->addByTail("hello-one");
$linkedList->addByTail("hello-two");
$linkedList->addByTail("hello-three");
$linkedList->addByTail("hello-for");
$linkedList->addByTail("hello-five");
$linkedList->addByHead("hello-six");
$linkedList->addByHead("hello-seven");
$linkedList->addByHead("hello-eight");
$linkedList->addByIndex("hello-six", "hello**world");


$linkedList->update("hello**world", "PHP");

$linkedList->remove("hello-one");
$linkedList->remove("hello-two");

var_dump($linkedList->getSize());

var_dump($linkedList->toString());
var_dump($linkedList->isEmpty());
原文地址:https://www.cnblogs.com/yanweifeng/p/12810229.html