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 相关文章推荐
输出控制类
Oct 09 PHP
php zend解密软件绿色版测试可用
Apr 14 PHP
php实现jQuery扩展函数
Oct 30 PHP
php文章内容分页并生成相应的htm静态页面代码
Jun 07 PHP
ThinkPHP的URL重写问题
Jun 22 PHP
腾讯CMEM的PHP扩展编译安装方法
Sep 25 PHP
Zend Framework过滤器Zend_Filter用法详解
Dec 09 PHP
浅谈Laravel中的一个后期静态绑定
Aug 11 PHP
PHP实现微信对账单处理
Oct 01 PHP
Laravel框架路由管理简单示例
May 07 PHP
laravel框架查询数据集转为数组的两种方法
Oct 10 PHP
详细分析PHP 命名空间(namespace)
Jun 30 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 #PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
Nov 10 #PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
Nov 10 #PHP
PHP简单实现循环链表功能示例
Nov 10 #PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
Nov 08 #PHP
php基于环形链表解决约瑟夫环问题示例
Nov 07 #PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
Nov 07 #PHP
You might like
PHP中使用gettext来支持多语言的方法
2011/05/02 PHP
php连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
php实现的Curl封装类Curl.class.php用法实例分析
2015/09/25 PHP
javascript下操作css的float属性的特殊写法
2007/08/22 Javascript
getComputedStyle与currentStyle获取样式(style/class)
2013/03/19 Javascript
js函数定时器实现定时读取系统实时连接数
2014/04/30 Javascript
json的定义、标准格式及json字符串检验
2014/05/11 Javascript
JS获取鼠标选中的文字
2016/08/10 Javascript
原生js实现下拉框功能(支持键盘事件)
2017/01/13 Javascript
Vue.use源码分析
2017/04/22 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
jQuery中内容过滤器简单用法示例
2018/03/31 jQuery
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
element UI upload组件上传附件格式限制方法
2018/09/04 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
vue 使用vue-i18n做全局中英文切换的方法
2018/10/29 Javascript
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
2018/11/01 NodeJs
angular6的table组件开发的实现示例
2018/12/26 Javascript
JavaScript 如何计算文本的行数的实现
2020/09/14 Javascript
简单介绍Python中的len()函数的使用
2015/04/07 Python
Python3字符串学习教程
2015/08/20 Python
Python全局变量用法实例分析
2016/07/19 Python
基于python3 OpenCV3实现静态图片人脸识别
2018/05/25 Python
Python Tkinter Entry和Text的添加与使用详解
2020/03/04 Python
python实现井字棋小游戏
2020/03/04 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
2020/04/24 Python
CSS3转换功能transform主要属性值分析及实现分享
2012/05/06 HTML / CSS
英国最大的宠物食品和宠物用品网上零售商: Zooplus
2016/08/01 全球购物
英国玛莎百货美国官网:Marks & Spencer美国
2018/11/06 全球购物
英国第一职业高尔夫商店:Clickgolf.co.uk
2020/11/18 全球购物
意大利网上购书网站:Libraccio.it
2021/02/03 全球购物
汇科协同Java笔试题
2012/03/31 面试题
办公室文员工作自我评价
2013/12/01 职场文书
优秀学生评语大全
2014/04/25 职场文书
结婚保证书
2015/01/16 职场文书
多属性、多分类MySQL模式设计
2021/04/05 MySQL