• 域名注册
  • 虚拟主机
  • 繁體中文
  • 网站地图
  • 您现在的位置:速牧网 >> 编程代码 >> 内容

    实例讲述PHP实现双链表删除与插入节点的方法

    来源:网络 作者:不详 时间:2018-2-9 22:00:39

    本文实例讲述了PHP实现双链表删除与插入节点的方法。分享给大家供大家参考,具体如下:

    概述:

    双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。

    实现代码:

    php.html="" tags="">
    php;">
    data=$data;
        $this->prev=$prev;
        $this->next=$next;
      }
    }
    class doubleLinkList{
      private $head;
      public function __construct()
      {
        $this->head=new node("head",null,null);
      }
      //插入节点
      public function insertLink($data){
        $p=new node($data,null,null);
        $q=$this->head->next;
        $r=$this->head;
        while($q){
          if($q->data>$data){
            $q->prev->next=$p;
            $p->prev=$q->prev;
            $p->next=$q;
            $q->prev=$p;
          }else{
          $r=$q;$q=$q->next;
          }
        }
        if($q==null){
          $r->next=$p;
          $p->prev=$r;
        }
      }
      //从头输出节点
      public function printFromFront(){
        $p=$this->head->next;
        $string="";
        while($p){
        $string.=$string?",":"";
        $string.=$p->data;
        $p=$p->next;
        }
        echo $string."
    ";
      }
      //从尾输出节点
      public function printFromEnd(){
        $p=$this->head->next;
        $r=$this->head;
        while($p){
        $r=$p;$p=$p->next;
        }
        $string="";
        while($r){
          $string.=$string?",":"";
          $string.=$r->data;
          $r=$r->prev;
        }
        echo $string."
    ";
      }
      public function delLink($data){
        $p=$this->head->next;
        if(!$p)
        return;
        while($p){
          if($p->data==$data)
          {
            $p->next->prev=$p->prev;
            $p->prev->next=$p->next;
            unset($p);
            return;
          }
          else{
            $p=$p->next;
          }
        }
        if($p==null)
        echo "没有值为{$data}的节点";
      }
    }
    $link=new doubleLinkList();
    $link->insertLink(1);
    $link->insertLink(2);
    $link->insertLink(3);
    $link->insertLink(4);
    $link->insertLink(5);
    $link->delLink(3);
    $link->printFromFront();
    $link->printFromEnd();
    $link->delLink(6);

    运行结果:

    ?
    1
    2
    3
    1,2,4,5
    5,4,2,1,head
    没有值为6的节点
    本文实例讲述PHP实现双链表删除与插入节点的方法,希望本文所述对大家PHP程序设计有所帮助

  • 速牧网(www.suumuu.com) © 2018 版权所有 All Rights Reserved.
  • 豫ICP备17050497号