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 获取select下拉列表框的值
May 08 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
Jul 04 PHP
PHP中使用数组实现堆栈数据结构的代码
Feb 05 PHP
在smarty中调用php内置函数的方法
Feb 07 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
Aug 19 PHP
PHP实现采集抓取淘宝网单个商品信息
Jan 08 PHP
PHP合并数组+号和array_merge的区别
Jun 25 PHP
详谈PHP中的密码安全性Password Hashing
Feb 04 PHP
PHP中include()与require()的区别说明
Feb 14 PHP
php7性能提升的原因详解
Oct 13 PHP
php 多个变量指向同一个引用($b = &amp;$a)用法分析
Nov 13 PHP
php模拟post提交请求调用接口示例解析
Aug 07 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
Windows下PHP的任意文件执行漏洞
2006/10/09 PHP
第七章 php自定义函数实现代码
2011/12/30 PHP
使用PHPMyAdmin修复论坛数据库的图文方法
2012/01/09 PHP
解析htaccess伪静态的规则
2013/06/18 PHP
php使用GeoIP库实例
2014/06/27 PHP
简单谈谈php中的unicode和utf8编码
2015/06/10 PHP
PHP实现图片的等比缩放和Logo水印功能示例
2017/05/04 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
PHP使用反向Ajax技术实现在线客服系统详解
2019/07/01 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
javascript 显示当前系统时间代码
2009/12/28 Javascript
Javascript和Java获取各种form表单信息的简单实例
2014/02/14 Javascript
jQuery过滤特殊字符及JS字符串转为数字
2016/05/26 Javascript
jQuery使用经验小技巧(推荐)
2016/05/31 Javascript
layui 对弹窗 form表单赋值的实现方法
2019/09/04 Javascript
python实现异步回调机制代码分享
2014/01/10 Python
Python 使用requests模块发送GET和POST请求的实现代码
2016/09/21 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
详解Golang 与python中的字符串反转
2017/07/21 Python
Django+zTree构建组织架构树的方法
2019/08/21 Python
通过python调用adb命令对App进行性能测试方式
2020/04/23 Python
keras用auc做metrics以及早停实例
2020/07/02 Python
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
经典促销广告词大全
2014/03/19 职场文书
市场营销调查计划书
2014/05/02 职场文书
副职竞争上岗演讲稿
2014/05/12 职场文书
师德模范事迹材料
2014/06/03 职场文书
动画设计系毕业生求职信
2014/07/15 职场文书
大学生求职信怎么写
2015/03/19 职场文书
城南旧事读书笔记
2015/06/29 职场文书
中学总务处工作总结
2015/08/12 职场文书
单位病假条范文
2015/08/17 职场文书
《将心比心》教学反思
2016/02/23 职场文书
当你焦虑迷茫时,请读读这6句话
2019/07/24 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书
Python字符串的转义字符
2022/04/07 Python