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配置心得包含MYSQL5乱码解决
Nov 20 PHP
一个PHP验证码类代码分享(已封装成类)
Jul 17 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
Jan 23 PHP
php操作xml
Oct 27 PHP
PHP图片自动裁切应付不同尺寸的显示
Oct 16 PHP
php单例模式实现方法分析
Mar 14 PHP
php等比例缩放图片及剪切图片代码分享
Feb 13 PHP
Yii2.0 Basic代码中路由链接被转义的处理方法
Sep 21 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
微信公众平台开发教程②微信端分享功能图文详解
Apr 10 PHP
laravel 关联关系遍历数组的例子
Oct 10 PHP
Laravel 实现添加多语言提示信息
Oct 25 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
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
过滤掉PHP数组中的重复值的实现代码
2011/07/17 PHP
PHP中spl_autoload_register函数的用法总结
2013/11/07 PHP
thinkphp的CURD和查询方式介绍
2013/12/19 PHP
详解PHP中strlen和mb_strlen函数的区别
2014/03/07 PHP
PHP通过API获取手机号码归属地
2015/05/28 PHP
php实现的单一入口应用程序实例分析
2015/09/23 PHP
学习php设计模式 php实现工厂模式(factory)
2015/12/07 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
浅谈JavaScript之事件绑定
2013/07/08 Javascript
javascript创建cookie、读取cookie
2016/03/31 Javascript
用AngularJS的指令实现tabs切换效果
2016/08/31 Javascript
深入理解JavaScript定时机制
2016/10/27 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
jQuery中值得注意的trigger方法浅析
2016/12/12 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
基于Vue实现拖拽功能
2020/07/29 Javascript
JavaScript实现随机点名器实例详解
2019/05/07 Javascript
vue 路由子组件created和mounted不起作用的解决方法
2019/11/05 Javascript
javascript实现贪吃蛇游戏(娱乐版)
2020/08/17 Javascript
详解Python文本操作相关模块
2017/06/22 Python
Python编程中NotImplementedError的使用方法
2018/04/21 Python
Python3.6使用tesseract-ocr的正确方法
2018/10/17 Python
python else语句在循环中的运用详解
2020/07/06 Python
css3 实现元素弧线运动的示例代码
2020/04/24 HTML / CSS
css3 transform过渡抖动问题解决
2020/10/23 HTML / CSS
Perry Ellis官网:美国男士品味服装
2016/12/09 全球购物
篝火晚会主持词
2014/03/25 职场文书
小学生节约用水倡议书
2014/05/15 职场文书
市场营销毕业求职信
2014/08/07 职场文书
涉及车辆房产分割的离婚协议书范文
2014/10/12 职场文书
2016大学迎新晚会开场白
2015/11/24 职场文书
如何利用opencv判断两张图片是否相同详解
2021/07/07 Python
Python echarts实现数据可视化实例详解
2022/03/03 Python
Python中npy和mat文件的保存与读取
2022/04/24 Python
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers