美文网首页
php实现单链表

php实现单链表

作者: 吕艳凯 | 来源:发表于2019-12-03 20:05 被阅读0次

链表是由一组节点组成的集合。每个节点都使用一个对象的引用指向它的后继。指向另一个节点的引用叫做链。
某种程度上避免数组构建时需要连续分配连续内存的缺陷
单链表

单链表
插入:链表中插入一个节点的效率很高。向链表中插入一个节点,需要修改它前面的节点(前驱),使其指向新加入的节点,而新加入的节点则指向原来前驱指向的节点(见下图)。
插入单链表
由上图可知,B、C之间插入D,三者之间的关系为
current为插入节点的前驱节点
current->next = new              // B节点指向新节点D
new->next = current->next        // 新节点D指向B的后继节点C

删除:从链表中删除一个元素,将待删除元素的前驱节点指向待删除元素的后继节点,同时将待删除元素指向 null,元素就删除成功了(见下图)。

删除单链表
由上图可知,A、C之间删除B,三者之间的关系为
current为要删除节点的前驱节点
current->next = current->next->next    // A节点指向C节点

具体实现代码如下:

//节点类
class Node{

    private $data;
    private $next;
    
    public function __construct($data){
        $this->data = $data;
    }
    
    public function __set($property_name,$value){
        //注意在魔术方法__set和__get中$this是指向变量而非固定属性
        //因此这里为$this->$property_name
        $this->$property_name = $value;
    }
    
    public function __get($property_name){
        return $this->$property_name;
    }

}

//单链表类
class SingleLinkedList{

    private $header;

    public function __construct($data){
        $this->header = new Node($data);
    }
    
    //查找当前节点
    public function findNode($data){
        $currentNode = $this->header;
        //$currentNode->next != null判断返回只含有头节点或者链表的最后一个节点
        //$currentNode->data != $data判断返回查找结果节点
        while($currentNode->next != null && $currentNode->data != $data){
            //当前节点指针移动到下个节点
            $currentNode = $currentNode->next;
        }
        return $currentNode;
    }
    
    //根据当前节点插入节点
    public function insertNode($nodeData,$data){
        //查找当前节点
        $currentNode = $this->findNode($nodeData);
        $newNode = new Node($data);
        //将新节点加入链表
        $newNode->next = $currentNode->next;
        $currentNode->next= $newNode;

        return true;
    }

    //更新节点
    public function updateNode($old,$new){
        $currentNode = $this->findNode($old);
        $currentNode->data = $new;
        return true;
    }

    //查找节点数据的前一个节点
    public function preNode($data){
        $currentNode = $this->header;
        //查找节点的下一个节点的值等于查找数据时,返回当前节点即为查找节点的上一个节点
        while($currentNode->next != null && $currentNode->next->data != $data) {
            $currentNode = $currentNode->next;
        }
        return $currentNode;
    }

    //删除节点
    public function deleteNode($node){
        $preNode = $this->preNode($node);
        $currentNode = $this->findNode($node);
        $preNode->next = $currentNode->next;
        return true;
    }

    //清空链表
    public function clearNode(){
        $this->header = null;
    }

    //展示链表,这里不展示头节点
    public function display(){
        $currentNode = $this->header;
        if($currentNode->next == null){
            echo "链表为空";
        }
        while($currentNode->next != null){
            echo $currentNode->next->data."\t";
            $currentNode = $currentNode->next;
        }
    }

}

$linkedList = new SingleLinkedList("header");
$linkedList->insertNode("header","mayun");
$linkedList->insertNode("mayun","mahuateng");
$linkedList->insertNode("mahuateng","liyanhong");
$linkedList->insertNode("liyanhong","liuqiangdong");
echo "展示链表,这里不展示头节点";
echo "\n";
$linkedList->display();
echo "\n";
echo "删除节点后展示";
echo "\n";
$linkedList->deleteNode("liyanhong");
$linkedList->display();
echo "\n";
echo "更新节点";
echo "\n";
$linkedList->updateNode("liuqiangdong","zhangyiming");
$linkedList->display();
echo "\n";

执行结果如下:


执行结果

相关文章

  • php实现单链表

    链表是由一组节点组成的集合。每个节点都使用一个对象的引用指向它的后继。指向另一个节点的引用叫做链。某种程度上避免数...

  • 线性表之单链表实现

    线性表之单链表实现 实现单链表的初始化、插入、删除等基本运算 实现单链表的输入、输出运算 实现单链表的逆置、归并、...

  • 25_静态单链表的实现

    关键词: 单链表的一个缺点、静态单链表设计思路、静态单链表的继承层次结构、静态单链表的实现思路、静态单链表的实现 ...

  • 链表基本操作

    1、删除单链表节点 2、插入单链表结点 单链表具体实现

  • 单链表

    PHP的算法单链表问题 用单链表实现一个水浒英雄排行榜,可以添加英雄删除英雄 1.定义一个英雄类 clas Her...

  • 单链表 & 双链表& 单向循环链表的实现

    单链表 具体实现: 双链表 代码实现: 单向循环链表的实现 代码实现:

  • PHP 实现数据结构

    参考诸多视频和文章,主要通过PHP 实现线性表的顺序存储结构,单链表,静态链表,双向链表以及二叉树等数据结构,代码...

  • 链表

    单链表 C实现 Java实现 双链表 C实现 Java实现

  • leetcode 单链表的各种算法

    1 递归实现:合并两个有序的单链表 2 递归实现:单链表逆序存入vector 3 循环实现:快慢指针找到单链表中间...

  • 链表常用操作的代码实现

    以单链表为例,假设单链表的节点结构为 则单链表的实现如下

网友评论

      本文标题:php实现单链表

      本文链接:https://www.haomeiwen.com/subject/gmshgctx.html