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目录导航文件代码
Oct 09 PHP
How do I change MySQL timezone?
Mar 26 PHP
用mysql_fetch_array()获取当前行数据的方法详解
Jun 05 PHP
php合并数组中相同元素的方法
Nov 13 PHP
php调整服务器时间的方法
Apr 03 PHP
discuz图片顺序混乱解决方案
Jul 29 PHP
PHP list() 将数组中的值赋给变量的简单实例
Jun 13 PHP
PHP递归获取目录内所有文件的实现方法
Nov 01 PHP
thinkPHP自定义类实现方法详解
Nov 30 PHP
PHP实现大数(浮点数)取余的方法
Feb 18 PHP
Laravel框架控制器的middleware中间件用法分析
Sep 30 PHP
laravel5.1框架model类查询的实现方法
Oct 08 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中支持多种编码的中文字符串截取函数!
2007/03/20 PHP
PHP入门学习笔记之一
2010/10/12 PHP
php缓存技术详细总结
2013/08/07 PHP
Laravel 5框架学习之Blade 简介
2015/04/08 PHP
jQuery入门第一课 jQuery选择符
2010/03/14 Javascript
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
在页面加载完成后通过jquery给多个span赋值
2014/05/21 Javascript
7个有用的jQuery代码片段分享
2015/05/19 Javascript
JS小数运算出现多为小数问题的解决方法
2016/06/02 Javascript
BootStrap网页中代码显示用法详解
2016/10/21 Javascript
js实现小窗口拖拽效果
2016/12/03 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
vue里面父组件修改子组件样式的方法
2018/02/03 Javascript
浅谈webpack打包之后的文件过大的解决方法
2018/03/07 Javascript
JS中的事件委托实例浅析
2018/03/22 Javascript
微信小程序可滑动周日历组件使用详解
2019/10/21 Javascript
[09:40]DAC2018 4.5 SOLO赛 MidOne vs Miracle
2018/04/06 DOTA
python文件和目录操作函数小结
2014/07/11 Python
详解Python当中的字符串和编码
2015/04/25 Python
Python编程中归并排序算法的实现步骤详解
2016/05/04 Python
Python爬虫实现百度图片自动下载
2018/02/04 Python
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
python之文件读取一行一行的方法
2018/07/12 Python
python多线程并发让两个LED同时亮的方法
2019/02/18 Python
Python叠加两幅栅格图像的实现方法
2019/07/05 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
Python新手学习装饰器
2020/06/04 Python
纯HTML+CSS3制作导航菜单(附源码)
2013/04/24 HTML / CSS
优秀经理获奖感言
2014/03/04 职场文书
爱护公共设施倡议书
2014/08/29 职场文书
2014年教师节演讲稿
2014/09/03 职场文书
酒店管理失职检讨书
2014/09/16 职场文书
个人工作表现评价材料
2014/09/21 职场文书
利用Redis实现点赞功能的示例代码
2022/06/28 Redis