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获取当前文件所在目录 getcwd()函数
May 13 PHP
PHP 上传文件大小限制
Jul 05 PHP
PHP Zip压缩 在线对文件进行压缩的函数
May 26 PHP
关于UEditor编辑器远程图片上传失败的解决办法
Aug 31 PHP
用php简单实现加减乘除计算器
Jan 06 PHP
php 魔术方法详解
Nov 11 PHP
PHP向浏览器输出内容的4个函数总结
Nov 17 PHP
PHP编译安装时常见错误解决办法
May 28 PHP
php实现的操作excel类详解
Jan 15 PHP
在Thinkphp中使用ajax实现无刷新分页的方法
Oct 25 PHP
Laravel学习教程之本地化模块
Aug 18 PHP
PHP文件操作实例总结【文件上传、下载、分页】
Dec 08 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 遍历数据表数据并列表横向排列的代码
2009/09/05 PHP
PHP获取文件相对路径的方法
2015/02/26 PHP
PHP+iframe图片上传实现即时刷新效果
2016/11/18 PHP
PHP中函数gzuncompress无法使用的解决方法
2017/03/02 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
PHP 爬取网页的主要方法
2018/07/13 PHP
详解将数据从Laravel传送到vue的四种方式
2019/10/16 PHP
jquery 循环显示div的示例代码
2013/10/18 Javascript
JS实现一键回顶功能示例代码
2013/10/28 Javascript
jquery each的几种常用的使用方法示例
2014/01/21 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
2014/04/25 Javascript
JavaScript中消除闭包的一般方法介绍
2015/03/16 Javascript
由浅入深讲解Javascript继承机制与simple-inheritance源码分析
2015/12/13 Javascript
javascript事件模型介绍
2016/05/31 Javascript
完美实现js拖拽效果 return false用法详解
2017/07/28 Javascript
微信小程序对接七牛云存储的方法
2017/07/30 Javascript
vue封装第三方插件并发布到npm的方法
2017/09/25 Javascript
vue-router 源码实现前端路由的两种方式
2018/07/02 Javascript
微信小程序实现左侧滑栏过程解析
2019/08/26 Javascript
vue使用openlayers实现移动点动画
2020/09/24 Javascript
[39:53]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.19
2020/11/19 DOTA
Python编写检测数据库SA用户的方法
2014/07/11 Python
python回溯法实现数组全排列输出实例分析
2015/03/17 Python
Python输出各行命令详解
2018/02/01 Python
对Python中type打开文件的方式介绍
2018/04/28 Python
python+POP3实现批量下载邮件附件
2018/06/19 Python
全面了解django的缓存机制及使用方法
2019/07/22 Python
Python调用JavaScript代码的方法
2020/10/27 Python
详解Python模块化编程与装饰器
2021/01/16 Python
Optimalprint加拿大:在线打印服务
2020/04/03 全球购物
Zatchels官网:英国剑桥包品牌
2021/01/12 全球购物
编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的
2015/07/23 面试题
买卖车协议书
2014/04/21 职场文书
机电系毕业生求职信
2014/07/11 职场文书
javascript进阶篇深拷贝实现的四种方式
2022/07/07 Javascript
js 实现Material UI点击涟漪效果示例
2022/09/23 Javascript