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面向对象的方法重载两种版本比较
Sep 08 PHP
五款常用mysql slow log分析工具的比较分析
May 22 PHP
PHP中读写文件实现代码
Oct 20 PHP
基于php中使用excel的简单介绍
Aug 02 PHP
使用php清除bom示例
Mar 03 PHP
php中使用url传递数组的方法
Feb 11 PHP
PHP+APACHE实现网址伪静态
Feb 22 PHP
PHP SOCKET编程详解
May 22 PHP
老生常谈PHP中的数据结构:DS扩展
Jul 17 PHP
Laravel框架路由设置与使用示例
Jun 12 PHP
tp5框架无刷新分页实现方法分析
Sep 26 PHP
解决laravel查询构造器中的别名问题
Oct 17 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仿ZOL分页类代码
2008/10/02 PHP
php 编写安全的代码时容易犯的错误小结
2010/05/20 PHP
php设计模式 Observer(观察者模式)
2011/06/26 PHP
php配置php-fpm启动参数及配置详解
2013/11/04 PHP
php开发微信支付获取用户地址
2015/10/04 PHP
JS 页面自动加载函数(兼容多浏览器)
2009/05/18 Javascript
JQuery 学习笔记 选择器之四
2009/07/23 Javascript
javascript编码的几个方法详细介绍
2013/01/06 Javascript
在jQuery中 关于json空对象筛选替换
2013/04/15 Javascript
javascript的parseFloat()方法精度问题探讨
2013/11/26 Javascript
jQuery数据缓存用法分析
2015/02/20 Javascript
C#微信小程序服务端获取用户解密信息实例代码
2017/03/10 Javascript
使用Vue写一个datepicker的示例
2018/01/27 Javascript
微信小程序左滑动显示菜单功能的实现
2018/06/14 Javascript
React组件内事件传参实现tab切换的示例代码
2018/07/04 Javascript
Node.js 多线程完全指南总结
2019/03/27 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
node.js中path路径模块的使用方法实例分析
2020/02/13 Javascript
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
Python嵌套式数据结构实例浅析
2019/03/05 Python
win8.1安装Python 2.7版环境图文详解
2019/07/01 Python
python opencv pytesseract 验证码识别的实现
2020/08/28 Python
python 用Matplotlib作图中有多个Y轴
2020/11/28 Python
澳大利亚领先的优质葡萄酒拍卖会:Langton’s Fine Wines
2019/03/24 全球购物
丹麦优惠购物网站:PLUSSHOP
2019/03/24 全球购物
如何利用find命令查找文件
2015/02/07 面试题
司马光教学反思
2014/02/01 职场文书
财务人员求职自荐书范文
2014/02/10 职场文书
发展部经理职责规定
2014/02/22 职场文书
应届毕业生求职信范文
2014/05/08 职场文书
副科竞争上岗演讲稿
2014/05/12 职场文书
学生会感恩节活动方案
2014/10/11 职场文书
人力资源部岗位职责
2015/02/11 职场文书
银行中层干部培训心得体会
2016/01/11 职场文书
导游词之南京栖霞山
2019/10/18 职场文书
JavaScript中时间格式化新思路toLocaleString()
2021/11/07 Javascript