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 相关文章推荐
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
May 03 PHP
php5 pdo新改动加载注意事项
Sep 11 PHP
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
May 19 PHP
PHP中static关键字原理的学习研究分析
Jul 18 PHP
PHP中new static() 和 new self() 的区别介绍
Jan 09 PHP
PHP获取毫秒级时间戳的方法
Apr 15 PHP
php中删除、清空session的方式总结
Oct 09 PHP
PHP中文竖排转换实现方法
Oct 23 PHP
php操作路径的经典方法(必看篇)
Oct 04 PHP
php排序算法实例分析
Oct 17 PHP
PHP实现的常规正则验证helper公共类完整实例
Apr 27 PHP
PHP生成随机字符串实例代码(字母+数字)
Sep 11 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
JS实现php的伪分页
2008/05/25 PHP
phpmail类发送邮件函数代码
2012/02/20 PHP
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
PHP中的use关键字及文件的加载详解
2016/11/28 PHP
PHP实现微信对账单处理
2018/10/01 PHP
jquery $.ajax各个事件执行顺序
2010/10/15 Javascript
JavaScript Title、alt提示(Tips)实现源码解读
2010/12/12 Javascript
Raphael一个用于在网页中绘制矢量图形的Javascript库
2013/01/08 Javascript
JS保留小数点(四舍五入、四舍六入)实现思路及实例
2013/04/25 Javascript
JS window对象的top、parent、opener含义介绍
2013/12/03 Javascript
javascript制作坦克大战全纪录(1)
2014/11/27 Javascript
使用javascript实现雪花飘落的效果
2015/01/13 Javascript
JS交换变量的方法
2015/01/21 Javascript
jQuery实现自定义事件的方法
2015/04/17 Javascript
JS命令模式例子之菜单程序
2016/10/10 Javascript
jQuery自定义元素右键点击事件(实现案例)
2017/04/28 jQuery
详解vue组件通信的三种方式
2017/06/30 Javascript
浅谈Node.js ORM框架Sequlize之表间关系
2017/07/24 Javascript
vue的基本用法与常见指令
2017/08/15 Javascript
vuex 使用文档小结篇
2018/01/11 Javascript
vue组件之间数据传递的方法实例分析
2019/02/12 Javascript
使用ESLint禁止项目导入特定模块的方法步骤
2019/03/04 Javascript
python正则表达式去掉数字中的逗号(python正则匹配逗号)
2013/12/25 Python
用Python的Django框架来制作一个RSS阅读器
2015/07/22 Python
利用matplotlib+numpy绘制多种绘图的方法实例
2017/05/03 Python
python中Matplotlib实现绘制3D图的示例代码
2017/09/04 Python
Python3多目标赋值及共享引用注意事项
2019/05/27 Python
python提取log文件内容并画出图表
2019/07/08 Python
基于spring boot 日志(logback)报错的解决方式
2020/02/20 Python
澳大利亚头发和美容产品购物网站:OZ Hair & Beauty
2020/03/27 全球购物
餐厅执行经理岗位职责范本
2014/02/26 职场文书
干部作风建设个人剖析材料
2014/10/11 职场文书
goland 清除所有的默认设置操作
2021/04/28 Golang
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android
MySQ InnoDB和MyISAM存储引擎介绍
2022/04/26 MySQL
MySQL查询日期时间
2022/05/15 MySQL