美文网首页
使用PHP创建一个双向链表

使用PHP创建一个双向链表

作者: zooeymoon | 来源:发表于2018-07-23 02:45 被阅读0次

创建双向链表

<?php
/**
 * Created by PhpStorm.
 * User: zooeymoon
 * Date: 2018/5/15
 * Time: 23:46
 */

class Node{

    public $element;
    public $next;
    public $previous;

    public function __construct($element,$next = null,$previous = null)
    {
        $this->element = $element;
        $this->next = $next;
        $this->previous = $previous;

    }

}


class LinkedList{

    public $head;

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

    /**
     * 查找元素是否在链表中
     * @param $item
     * @return Node|null
     */
    public function find($item)
    {
        $currNode = $this->head;

        while ($currNode->element != $item){
            $currNode = $currNode->next;
        }

        return $currNode;
    }

    /**
     * 向链表中插入一个元素
     * @param $newElement
     * @param $item
     */
    public function insert($newElement , $item)
    {
        $newNode = new Node($newElement);
        $current = $this->find($item);

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

    }

    public function display()
    {
        $currNode = $this->head;

        while ($currNode != null){
            echo $currNode->next->element;
            echo "<br/>";
            $currNode = $currNode->next;
        }
    }

    /**
     * 从链表中删除一个元素
     * 首先找到待删除元素的前一个元素
     * @param $item
     */
    public function remove($item)
    {
        $currNode = $this->find($item);

        if($currNode->next != null){

            $currNode->previous->next = $currNode->next;
            $currNode->next->previous = $currNode->previous;
            $currNode->next = null;
            $currNode->previous = null;

        }

    }

    /**
     * 找到置顶元素的链表前一个元素(在双向链表中不需要)
     * @param $item
     * @return Node|null
     */
    public function findPrevious($item)
    {
        $currNode = $this->head;

        while (($currNode->next != null) && ($currNode->next->element != $item)){
            $currNode = $currNode->next;
        }

        return $currNode;
    }


    /***
     * 查找双向链表的最后一个元素
     * @return Node|null
     */
    public function findLast()
    {
        $currNode = $this->head;
        while ($currNode->next != null){
            $currNode = $currNode->next;
        }

        return $currNode;
    }

    public function disReverse()
    {
        $currNode = $this->findLast();

        while ( $currNode->previous != null){
            echo $currNode->element;
            echo "<br/>";
            $currNode = $currNode->previous;
        }
    }

}

$llist = new LinkedList();
$llist->insert("Conway","head");
$llist->insert("Russellville","Conway");
$llist->insert("Carlisle","Russellville");
$llist->insert("Alma","Carlisle");
$llist->display();

$llist->remove("Conway");
$llist->display();

$llist->disReverse();

相关文章

  • 使用PHP创建一个双向链表

    创建双向链表

  • 线性表-双向链表与双向循环链表

    双向链表 双向链表示意图如下: 数据结构定义 创建双向链表 双向链表插入元素 双向链表删除元素 双向链表打印元素 ...

  • 双向链表&双向循环链表

    一、双向链表 带有前驱结点、后区节点 双向链表的创建 双向链表插入-逻辑 双向链表删除 删除双向链表指定的元素 二...

  • 数据结构与算法(三)

    1 双向链表 1.1 双向链表的创建 基础设置 创建 打印数据 1.2 双向链表的插入 正常情况 1.创建需要插入...

  • 0x05双向循环链表

    1 双向循环链表创建 2 双向循环链表插入元素 3 遍历双向循环链表 4双向循环链表删除结点

  • 双向链表于双向循环链表的终结

    一、双向链表: 1.双向链表的创建:如图 2.双向链表的输出: 3.双向链表的插入: 4.双向链表的删除: 二、双...

  • 数据结构与算法04-双向链表以及双向循环链表

    一、双向链表 0、定义结点 1、创建双向链接 2、打印循环链表的元素 3、双向链表插入元素 4、删除双向链表指定位...

  • 0x04双向链表

    1 创建双向链接 2 双向链表插入元素 3删除双向链表指定位置上的结点 4 删除双向链表指定的元素 5 在双向链表...

  • LRU 缓存

    采用哈希表+双向链表的数据结构,双向链表创建虚拟头结点、虚拟尾结点,用来查询最近最少使用的元素,刚刚使用或添加的元...

  • 2020-02-18 记录redis(3)

    存储-list ArrayList 使用数组方式 LinkList 使用双向链接方式 双向链表添加数据 双向链表删...

网友评论

      本文标题:使用PHP创建一个双向链表

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