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 相关文章推荐
Win2000+Apache+MySql+PHP4+PERL安装使用小结
Oct 09 PHP
用PHP发电子邮件
Oct 09 PHP
PHP实现用户认证及管理完全源码
Mar 11 PHP
利用PHP实现智能文件类型检测的实现代码
Aug 02 PHP
php生成4位数字验证码的实现代码
Nov 23 PHP
thinkphp微信开发(消息加密解密)
Dec 02 PHP
PHP微信红包API接口
Dec 05 PHP
PHP实现基于mysqli的Model基类完整实例
Apr 08 PHP
PHP中读取文件的几个方法总结(推荐)
Jun 03 PHP
php 截取utf-8格式的字符串实例代码
Oct 30 PHP
PHP编写daemon process 实例详解
Nov 13 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
Feb 14 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中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
PHP整合七牛实现上传文件
2015/07/03 PHP
老生常谈PHP中的数据结构:DS扩展
2017/07/17 PHP
laravel框架添加数据,显示数据,返回成功值的方法
2019/10/11 PHP
js字母大小写转换实现方法总结
2013/11/13 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
AngularJS 自定义过滤器详解及实例代码
2016/09/14 Javascript
WEB前端实现裁剪上传图片功能
2016/10/17 Javascript
Javascript Event(事件)的传播与冒泡
2017/01/23 Javascript
B/S(Web)实时通讯解决方案分享
2017/04/06 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
使用Vue开发一个实时性时间转换指令
2018/01/17 Javascript
karma+webpack搭建vue单元测试环境的方法示例
2018/05/24 Javascript
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
Vue+Java+Base64实现条码解析的示例
2020/09/23 Javascript
[01:13:18]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
在树莓派2或树莓派B+上安装Python和OpenCV的教程
2015/03/30 Python
在Django的视图中使用数据库查询的方法
2015/07/16 Python
Python抓取手机号归属地信息示例代码
2016/11/28 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
python 抓包保存为pcap文件并解析的实例
2019/07/23 Python
Python转换itertools.chain对象为数组的方法
2020/02/07 Python
python如何利用Mitmproxy抓包
2020/10/10 Python
pycharm实现猜数游戏
2020/12/07 Python
canvas烟花特效锦集
2018/01/17 HTML / CSS
手机配件第一品牌:ZAGG
2017/05/28 全球购物
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
什么是规则表达式
2012/05/03 面试题
会计实习自我鉴定
2013/12/04 职场文书
实习计划书范文
2015/01/16 职场文书
天鹅湖观后感
2015/06/09 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
尊师重教主题班会
2015/08/14 职场文书
JS实现简单控制视频播放倍速的实例代码
2021/04/18 Javascript
Java设计模式中的命令模式
2022/04/28 Java/Android
python内置模块之上下文管理contextlib
2022/06/14 Python