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 和 HTML
Oct 09 PHP
一些常用的php函数
Dec 06 PHP
解决php中Cannot send session cache limiter 的问题的方法
Apr 27 PHP
也谈php网站在线人数统计
Apr 09 PHP
编写漂亮的代码 - 将后台程序与前端程序分开
Apr 23 PHP
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
Jul 17 PHP
浅析php中jsonp的跨域实例
Jun 21 PHP
解析php防止form重复提交的方法
Jul 01 PHP
CodeIgniter框架URL路由总结
Sep 03 PHP
codeigniter实现get分页的方法
Jul 10 PHP
laravel框架创建授权策略实例分析
Nov 22 PHP
PHP常用header头定义代码示例汇总
Aug 29 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连接Oracle数据库
2006/10/09 PHP
PHP+MYSQL的文章管理系统(二)
2006/10/09 PHP
浅析PHP原理之变量(Variables inside PHP)
2013/08/09 PHP
php中ob_get_length缓冲与获取缓冲长度实例
2014/11/20 PHP
PHP的Socket网络编程入门指引
2015/08/11 PHP
Laravel框架在本地虚拟机快速安装的方法详解
2018/06/11 PHP
swoole锁的机制代码实例讲解
2021/03/04 PHP
浅析JS刷新框架中的其他页面 &amp;&amp; JS刷新窗口方法汇总
2013/07/08 Javascript
javascript实现简单的html5视频播放器
2015/05/06 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
2016/11/04 Javascript
使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解
2017/07/24 Javascript
Nuxt.js实战详解
2018/01/18 Javascript
详解react内联样式使用webpack将px转rem
2018/09/13 Javascript
微信小程序防止多次点击跳转(函数节流)
2019/09/19 Javascript
6种JavaScript继承方式及优缺点(小结)
2020/02/06 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
2020/11/04 Javascript
element-ui 弹窗组件封装的步骤
2021/01/22 Javascript
[01:32]完美世界DOTA2联赛10月29日精彩集锦
2020/10/30 DOTA
python 判断自定义对象类型
2009/03/21 Python
深入解析Python中的上下文管理器
2016/06/28 Python
基于python绘制科赫雪花
2018/06/22 Python
Python常见数据类型转换操作示例
2019/05/08 Python
如何基于python生成list的所有的子集
2019/11/11 Python
python 实现从高分辨图像上抠取图像块
2020/01/02 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
matplotlib jupyter notebook 图像可视化 plt show操作
2020/04/24 Python
keras在构建LSTM模型时对变长序列的处理操作
2020/06/29 Python
详解Python 循环嵌套
2020/07/09 Python
python如何导入依赖包
2020/07/13 Python
消防器材管理制度
2014/01/28 职场文书
《西游记》读后感(3篇)
2019/09/20 职场文书
看看如何用Python绘制小米新版天价logo
2021/04/20 Python
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
2021/09/25 Servers
一文了解MySQL二级索引的查询过程
2022/02/24 MySQL