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 相关文章推荐
SSI指令
Nov 25 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 PHP
PHP数据类型之布尔型的介绍
Apr 28 PHP
解析PHP中的正则表达式以及模式匹配
Jun 19 PHP
php数组删除元素示例
Mar 21 PHP
Yii中CGridView关联表搜索排序方法实例详解
Dec 03 PHP
php+mysqli使用面向对象方式更新数据库实例
Jan 29 PHP
php清除和销毁session的方法分析
Mar 19 PHP
详解WordPress开发中用于获取分类及子页面的函数用法
Jan 08 PHP
Zend Framework缓存Cache用法简单实例
Mar 19 PHP
php中Ioc(控制反转)和Di(依赖注入)
May 07 PHP
php微信开发之音乐回复功能
Jun 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中读写文件实现代码
2011/10/20 PHP
php使用CURL伪造IP和来源实例详解
2015/01/15 PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
2016/11/23 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
PHP 扩展Memcached命令用法实例总结
2020/06/04 PHP
jQuery 学习入门篇附实例代码
2010/03/16 Javascript
Javascript中获取出错代码所在文件及行数的代码
2010/09/23 Javascript
javascript日期操作详解(脚本之家整理)
2015/09/05 Javascript
详解AngularJS中的filter过滤器用法
2016/01/04 Javascript
JavaScript常用函数工具集:lao-utils
2016/03/01 Javascript
面试常见的js算法题
2017/03/23 Javascript
清空元素html(&quot;&quot;) innerHTML=&quot;&quot; 与 empty()的区别和应用(推荐)
2017/08/14 Javascript
JS运动特效之同时运动实现方法分析
2018/01/24 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
详解vue中的父子传值双向绑定及数据更新问题
2019/06/13 Javascript
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
django开发之settings.py中变量的全局引用详解
2017/03/29 Python
详解Django中六个常用的自定义装饰器
2018/07/04 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
2019/07/22 Python
python 根据字典的键值进行排序的方法
2019/07/24 Python
如何通过python的fabric包完成代码上传部署
2019/07/29 Python
基于python实现把json数据转换成Excel表格
2020/05/07 Python
python实现npy格式文件转换为txt文件操作
2020/07/01 Python
使用python批量修改XML文件中图像的depth值
2020/07/22 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
Python调用飞书发送消息的示例
2020/11/10 Python
详解CSS3弹性伸缩盒
2020/09/21 HTML / CSS
推荐WEB开发者最佳HTML5和CSS3代码生成器
2015/11/24 HTML / CSS
世界上最大的餐具公司:Oneida
2016/12/17 全球购物
苹果Mac升级:MacSales.com
2017/11/20 全球购物
世界上最大的字体市场:MyFonts
2020/01/10 全球购物
倡议书格式范文
2014/04/14 职场文书
党员领导干部民主生活会批评与自我批评发言
2014/09/28 职场文书
go结构体嵌套的切片数组操作
2021/04/28 Golang
Python 线程池模块之多线程操作代码
2021/05/20 Python
Java由浅入深通关抽象类与接口(下篇)
2022/04/26 Java/Android