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 递归效率分析
Nov 24 PHP
一步一步学习PHP(2)――PHP类型
Feb 15 PHP
web目录下不应该存在多余的程序(安全考虑)
May 09 PHP
PHP 自定义错误处理函数trigger_error()
Mar 26 PHP
解析mysql left( right ) join使用on与where筛选的差异
Jun 18 PHP
MongoDB在PHP中的常用操作小结
Feb 20 PHP
2014年最新推荐的10款 PHP 开发框架
Aug 01 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
Apr 01 PHP
PHP树-不需要递归的实现方法
Jun 21 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
Apr 10 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
Dec 10 PHP
PHP基于ip2long实现IP转换整形
Dec 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
重料打造自己的“宝马”---第三代
2021/03/02 无线电
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
2015/05/12 PHP
php arsort 数组降序排序详细介绍
2016/11/17 PHP
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
jquery中文乱码的多种解决方法
2013/06/21 Javascript
nodejs中使用monk访问mongodb
2014/07/06 NodeJs
js实现ArrayList功能附实例代码
2014/10/29 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
2016/06/12 Javascript
Vue学习之路之登录注册实例代码
2017/07/06 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
2017/12/20 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
2019/09/26 Javascript
浅谈Node新版本13.2.0正式支持ES Modules特性
2019/11/25 Javascript
Vue实现商品飞入购物车效果(电商项目)
2019/11/26 Javascript
[03:12]TI9战队档案 - Virtus Pro
2019/08/20 DOTA
python模拟新浪微博登陆功能(新浪微博爬虫)
2013/12/24 Python
Python选择排序、冒泡排序、合并排序代码实例
2015/04/10 Python
python如何把嵌套列表转变成普通列表
2018/03/20 Python
简单谈谈Python的pycurl模块
2018/04/07 Python
解决python大批量读写.doc文件的问题
2018/05/08 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
python如何将多个PDF进行合并
2019/08/13 Python
基于python的列表list和集合set操作
2019/11/24 Python
python 多维高斯分布数据生成方式
2019/12/09 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
编写strcpy函数
2014/06/24 面试题
电子商务个人自荐信
2013/12/12 职场文书
业务员薪酬管理制度
2014/01/15 职场文书
中药专业毕业自荐书范文
2014/02/08 职场文书
助学金感谢信
2015/01/20 职场文书
邹越演讲观后感
2015/06/15 职场文书
学习委员竞选稿
2015/11/20 职场文书
Python入门学习之类的相关知识总结
2021/05/25 Python
如何理解及使用Python闭包
2021/06/01 Python
简单总结SpringMVC拦截器的使用方法
2021/06/28 Java/Android