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 相关文章推荐
实用函数8
Nov 08 PHP
PHP 日期时间函数的高级应用技巧
Oct 10 PHP
ThinkPHP写第一个模块应用
Feb 20 PHP
windows下zendframework项目环境搭建(通过命令行配置)
Dec 06 PHP
IIS6.0中配置php服务全过程解析
Aug 07 PHP
php实现每天自动变换随机问候语的方法
May 12 PHP
浅谈PHP中Stream(流)
Jun 08 PHP
在openSUSE42.1下编译安装PHP7 的方法
Dec 24 PHP
PHP5.2中PDO的简单使用方法
Mar 25 PHP
php封装的smarty类完整实例
Oct 19 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
Dec 06 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 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脚本数据库功能详解(下)
2006/10/09 PHP
用来解析.htgroup文件的PHP类
2012/09/05 PHP
PHP常用正则表达式集锦
2014/08/17 PHP
ioncube_loader_win_5.2.dll的错误解决方法
2015/01/04 PHP
汇总PHPmailer群发Gmail的常见问题
2016/02/24 PHP
各种快递查询--Api接口
2016/04/26 PHP
CI框架实现框架前后端分离的方法详解
2016/12/30 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
javascript的onchange事件与jQuery的change()方法比较
2009/09/28 Javascript
jquery live()调用不存在的解决方法
2014/02/26 Javascript
九种原生js动画效果
2015/11/11 Javascript
JavaScript+html5 canvas实现本地截图教程
2020/04/16 Javascript
JavaScrpt的面向对象全面解析
2017/05/09 Javascript
Vue自定义指令使用方法详解
2017/08/21 Javascript
bootstrap multiselect下拉列表功能
2017/08/22 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
vue使用监听实现全选反选功能
2018/07/06 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
2019/05/10 Javascript
Vue项目实现换肤功能的一种方案分析
2019/08/28 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
python和shell变量互相传递的几种方法
2013/11/20 Python
python基于mysql实现的简单队列以及跨进程锁实例详解
2014/07/07 Python
Python同时向控制台和文件输出日志logging的方法
2015/05/26 Python
如何理解python中数字列表
2020/05/29 Python
Python基于字典实现switch case函数调用
2020/07/22 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
德国箱包网上商店:koffer24.de
2016/07/27 全球购物
一道Delphi面试题
2016/10/28 面试题
大学新学期计划书
2014/04/28 职场文书
2015年幼儿园教育教学工作总结
2015/05/25 职场文书
2015大一新生军训感言
2015/08/01 职场文书
python中Tkinter 窗口之输入框和文本框的实现
2021/04/12 Python
SQL Server中交叉联接的用法详解
2021/04/22 SQL Server
SpringBoot实现异步事件驱动的方法
2021/06/28 Java/Android
Python 处理表格进行成绩排序的操作代码
2021/07/26 Python
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang