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


Posted in PHP onNovember 11, 2017

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

概述:

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

实现代码:

<?php 
class node{
  public $prev;
  public $next;
  public $data;
  public function __construct($data,$prev=null,$next=null){
    $this->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."<br>";
  }
  //从尾输出节点
  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."<br>";
  }
  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,4,5
5,4,2,1,head
没有值为6的节点

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php 阴历-农历-转换类代码
Jan 16 PHP
php获取远程图片体积大小的实例
Nov 12 PHP
采用thinkphp自带方法生成静态html文件详解
Jun 13 PHP
基于PHP技术开发客服工单系统
Jan 06 PHP
CI框架常用方法小结
May 17 PHP
php微信浏览器分享设置以及回调详解
Aug 01 PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 PHP
php封装的page分页类完整实例
Oct 18 PHP
php使用自定义函数实现汉字分割替换功能示例
Jan 30 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
Oct 13 PHP
PHP chr()函数讲解
Feb 11 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
Jun 02 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 #PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
Nov 10 #PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
Nov 10 #PHP
PHP用函数嵌入网站访问量计数器
Oct 27 #PHP
PHP实现网站访问量计数器
Oct 27 #PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
Oct 26 #PHP
详解php 使用Callable Closure强制指定回调类型
Oct 26 #PHP
You might like
php !function_exists(&quot;T7FC56270E7A70FA81A5935B72EACBE29&quot;))代码解密
2011/01/07 PHP
php使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
php使用curl和正则表达式抓取网页数据示例
2014/04/13 PHP
Javascript实例教程(19) 使用HoTMetal(7)
2006/12/23 Javascript
又一个图片自动缩小的JS代码
2007/03/10 Javascript
在ASP.NET中使用JavaScript脚本的方法
2013/11/12 Javascript
jQuery实现大转盘抽奖活动仿QQ音乐代码分享
2015/08/21 Javascript
jquery validate.js表单验证入门实例(附源码)
2015/11/10 Javascript
javascript实现tab切换特效
2015/11/12 Javascript
jQuery实现的文字hover颜色渐变效果实例
2016/02/20 Javascript
angular基于路由控制ui-router实现系统权限控制
2016/09/27 Javascript
JavaScript的事件机制详解
2017/01/17 Javascript
基于jQuery实现一个marquee无缝滚动的插件
2017/03/09 Javascript
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
2018/08/29 Javascript
用图片替换checkbox原始样式并实现同样的功能
2018/11/15 Javascript
es6函数之尾递归用法实例分析
2020/04/25 Javascript
基于vue3.0.1beta搭建仿京东的电商H5项目
2020/05/06 Javascript
Python图像灰度变换及图像数组操作
2016/01/27 Python
python 删除非空文件夹的实例
2018/04/26 Python
Python中的取模运算方法
2018/11/10 Python
用Python从0开始实现一个中文拼音输入法的思路详解
2019/07/20 Python
Python嵌套函数,作用域与偏函数用法实例分析
2019/12/26 Python
浅析Python 抽象工厂模式的优缺点
2020/07/13 Python
numpy中生成随机数的几种常用函数(小结)
2020/08/18 Python
纯CSS3实现滚动的齿轮动画效果
2014/06/05 HTML / CSS
使用HTML5 IndexDB存储图像和文件的示例
2018/11/05 HTML / CSS
canvas压缩图片以及卡片制作的方法示例
2018/12/04 HTML / CSS
技校生自我鉴定
2013/12/08 职场文书
秋季运动会加油稿200字
2014/01/11 职场文书
报纸媒体创意广告词
2014/03/17 职场文书
老公爱的承诺书
2014/03/31 职场文书
出租车拒载检讨书
2015/01/28 职场文书
市场营销计划书
2019/04/24 职场文书
描写九月优美句子(39条)
2019/09/11 职场文书
MySQL RC事务隔离的实现
2022/03/31 MySQL