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写出自己的BLOG系统 2
Apr 12 PHP
php下用cookie统计用户访问网页次数的代码
May 09 PHP
重新封装zend_soap实现http连接安全认证的php代码
Jan 12 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
Jun 18 PHP
php MessagePack介绍
Oct 06 PHP
ThinkPHP3.1新特性之Action参数绑定
Jun 19 PHP
thinkphp判断访客为手机端或PC端的方法
Nov 24 PHP
CodeIgniter与PHP5.6的兼容问题
Jul 16 PHP
PHP7.1实现的AES与RSA加密操作示例
Jun 15 PHP
laravel 配置路由 api和web定义的路由的区别详解
Sep 03 PHP
PHP实现简单的计算器
Aug 28 PHP
浅谈PHP7中的一些小技巧
May 29 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 字符串操作入门教程
2006/12/06 PHP
用PHP实现Ftp用户的在线管理
2012/02/16 PHP
使用PHP curl模拟浏览器抓取网站信息
2013/10/28 PHP
php中call_user_func函数使用注意事项
2014/11/21 PHP
避免Smarty与CSS语法冲突的方法
2015/03/02 PHP
利用PHP判断是否是连乘数字串的方法示例
2017/07/03 PHP
JavaScript与Div对层定位和移动获得坐标的实现代码
2010/09/08 Javascript
javascript中为某个元素指定事件的三种方式
2014/08/07 Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
2014/08/07 Javascript
禁用页面部分JavaScript不是全部而是部分
2014/09/03 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
Node.js的项目构建工具Grunt的安装与配置教程
2016/05/12 Javascript
异步加载JS、CSS代码(推荐)
2016/06/15 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/10/05 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
vue中动态设置meta标签和title标签的方法
2018/07/11 Javascript
vue组件入门知识全梳理
2020/09/21 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
[52:02]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第一场 11.27
2020/11/30 DOTA
Python pass 语句使用示例
2014/03/11 Python
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
Python实现的密码强度检测器示例
2017/08/23 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
2020/01/03 Python
python实现小程序推送页面收录脚本
2020/04/20 Python
python eventlet绿化和patch原理
2020/11/21 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
pycharm最新激活码有效期至2100年(亲测可用)
2021/02/05 Python
学徒工职责
2014/03/06 职场文书
房地产活动策划方案
2014/05/14 职场文书
小学感恩节活动策划方案
2014/10/06 职场文书
PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤
2021/05/21 PostgreSQL
Java日常练习题,每天进步一点点(38)
2021/07/26 Java/Android
Nginx配置文件详解以及优化建议指南
2021/09/15 Servers
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers