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中执行系统外部命令
Oct 09 PHP
php 特殊字符处理函数
Sep 05 PHP
ubuntu 编译安装php 5.3.3+memcache的方法
Aug 05 PHP
set_include_path和get_include_path使用及注意事项
Feb 02 PHP
php防止恶意刷新与刷票的方法
Nov 21 PHP
php+mysqli使用预处理技术进行数据库查询的方法
Jan 28 PHP
php实现专业获取网站SEO信息类实例
Apr 02 PHP
thinkphp jquery实现图片上传和预览效果
Jul 22 PHP
php从身份证获取性别和出生年月
Feb 09 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
Feb 17 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
Dec 25 PHP
解决Laravel5.5下的toArray问题
Oct 15 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下MYSQL limit的优化
2008/01/10 PHP
PHP使用CURL_MULTI实现多线程采集的例子
2014/07/29 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
PHP实现动态创建XML文档的方法
2018/03/30 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
PHP执行linux命令6个函数代码实例
2020/11/24 PHP
js+css在交互上的应用
2010/07/18 Javascript
在百度知道团队中快速审批新成员的js脚本
2014/02/02 Javascript
jquery插件之定时查询待处理任务数量
2014/05/01 Javascript
jQuery中:reset选择器用法实例
2015/01/04 Javascript
浅谈javascript中的闭包
2015/05/13 Javascript
JS实现倒计时(天数、时、分、秒)
2016/11/16 Javascript
JS实现“隐藏与显示”功能(多种方法)
2016/11/24 Javascript
浅谈Node.js:fs文件系统模块
2016/12/08 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
轻松学习Javascript闭包
2017/03/01 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
2017/04/27 Javascript
vue-router 源码实现前端路由的两种方式
2018/07/02 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
2018/08/27 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
JavaScript 中的执行上下文和执行栈实例讲解
2021/02/25 Javascript
Python实现多级目录压缩与解压文件的方法
2018/09/01 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
Python综合应用名片管理系统案例详解
2020/01/03 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
对Tensorflow中tensorboard日志的生成与显示详解
2020/02/04 Python
Python super()函数使用及多重继承
2020/05/06 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
大学生两会精神学习心得体会
2014/03/10 职场文书
《分一分》教学反思
2014/04/13 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
网吧七夕活动策划方案
2014/08/31 职场文书
2014年学生会个人工作总结
2014/11/07 职场文书
售票员岗位职责
2015/02/15 职场文书
工作自我评价范文
2019/03/21 职场文书
标会主持词应该怎么写?
2019/08/15 职场文书