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 相关文章推荐
基于mysql的bbs设计(一)
Oct 09 PHP
用PHP伪造referer突破网盘禁止外连的代码
Jun 15 PHP
深入php之规范编程命名小结
May 15 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
Nov 03 PHP
ThinkPHP里用U方法调用js文件实例
Jun 18 PHP
PHP递归创建多级目录
Nov 05 PHP
基于laravel制作APP接口(API)
Mar 15 PHP
PHP Static延迟静态绑定用法分析
Mar 16 PHP
php使用glob函数遍历文件和目录详解
Sep 23 PHP
PHP使用ActiveMQ实例
Feb 05 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
Oct 21 PHP
PHP新手指南
Apr 01 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判断数据库中的记录是否存在的方法
2014/11/14 PHP
php身份证号码检查类实例
2015/06/18 PHP
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
Jquery实战_读书笔记1—选择jQuery
2010/01/22 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
jquery实现兼容浏览器的图片上传本地预览功能
2013/10/14 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
JSON与XML优缺点对比分析
2015/07/17 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
获取JavaScript异步函数的返回值
2016/12/21 Javascript
js生成随机颜色方法代码分享(三种)
2016/12/29 Javascript
JS求解三元一次方程组值的方法
2017/01/03 Javascript
Vuex之理解state的用法实例
2017/04/19 Javascript
JS实现百度搜索接口及链接功能实例代码
2018/02/02 Javascript
Vue2.0实现调用摄像头进行拍照功能 exif.js实现图片上传功能
2018/04/28 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
layui原生表单验证的实例
2019/09/09 Javascript
Python中最常用的操作列表的几种方法归纳
2015/04/24 Python
使用rpclib进行Python网络编程时的注释问题
2015/05/06 Python
python的Tqdm模块的使用
2018/01/10 Python
Python生成器以及应用实例解析
2018/02/08 Python
TensorFlow实现随机训练和批量训练的方法
2018/04/28 Python
对Xpath 获取子标签下所有文本的方法详解
2019/01/02 Python
Appium Python自动化测试之环境搭建的步骤
2019/01/23 Python
python pycharm的安装及其使用
2019/10/11 Python
如何给Python代码进行加密
2020/01/10 Python
使用Python项目生成所有依赖包的清单方式
2020/07/13 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
雅诗兰黛美国官网:Estee Lauder美国
2016/07/21 全球购物
中专生学习生活的自我评价分享
2013/10/27 职场文书
生物制药自我鉴定
2014/01/25 职场文书
优秀医生事迹材料
2014/02/12 职场文书
php TP5框架生成二维码链接
2021/04/01 PHP
Python基于Tkinter开发一个爬取B站直播弹幕的工具
2021/05/06 Python
Python标准库之typing的用法(类型标注)
2021/06/02 Python
Ajax 的初步实现(使用vscode+node.js+express框架)
2021/06/18 Javascript