当前位置:首页 > PHP教程 > php应用 > 列表

PHP实现双链表删除与插入节点的方法示例

发布:smiling 来源: PHP粉丝网  添加日期:2021-08-19 10:12:02 浏览: 评论:0 

这篇文章主要介绍了PHP实现双链表删除与插入节点的方法,结合实例形式分析了PHP双链表的定义与节点操作相关实现技巧,需要的朋友可以参考下。

本文实例讲述了PHP实现双链表删除与插入节点的方法,分享给大家供大家参考,具体如下:

概述:

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱,所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。

实现代码:

  1. <?php  
  2. class node{ 
  3.   public $prev
  4.   public $next
  5.   public $data
  6.   public function __construct($data,$prev=null,$next=null){ 
  7.     $this->data=$data
  8.     $this->prev=$prev
  9.     $this->next=$next
  10.   } 
  11. class doubleLinkList{ 
  12.   private $head
  13.   public function __construct() 
  14.   { 
  15.     $this->head=new node("head",null,null); 
  16.   } 
  17.   //插入节点 
  18.   public function insertLink($data){ 
  19.     $p=new node($data,null,null); 
  20.     $q=$this->head->next; 
  21.     $r=$this->head; 
  22.     while($q){ 
  23.       if($q->data>$data){ 
  24.         $q->prev->next=$p
  25.         $p->prev=$q->prev; 
  26.         $p->next=$q
  27.         $q->prev=$p
  28.       }else
  29.       $r=$q;$q=$q->next; 
  30.       } 
  31.     } 
  32.     if($q==null){ 
  33.       $r->next=$p
  34.       $p->prev=$r
  35.     } 
  36.   } 
  37.   //从头输出节点 
  38.   public function printFromFront(){ 
  39.     $p=$this->head->next; 
  40.     $string=""
  41.     while($p){ 
  42.     $string.=$string?",":""
  43.     $string.=$p->data; 
  44.     $p=$p->next; 
  45.     } 
  46.     echo $string."<br>"
  47.   } 
  48.   //从尾输出节点 
  49.   public function printFromEnd(){ 
  50.     $p=$this->head->next; 
  51.     $r=$this->head; 
  52.     while($p){ 
  53.     $r=$p;$p=$p->next; 
  54.     } 
  55.     $string=""
  56.     while($r){ 
  57.       $string.=$string?",":""
  58.       $string.=$r->data; 
  59.       $r=$r->prev; 
  60.     } 
  61.     echo $string."<br>"
  62.   } 
  63.   public function delLink($data){ 
  64.     $p=$this->head->next; 
  65.     if(!$p
  66.     return
  67.     while($p){ 
  68.       if($p->data==$data
  69.       { 
  70.         $p->next->prev=$p->prev; 
  71.         $p->prev->next=$p->next; 
  72.         unset($p); 
  73.         return
  74.       } 
  75.       else
  76.         $p=$p->next; 
  77.       } 
  78.     } 
  79.     if($p==null) 
  80.     echo "没有值为{$data}的节点"
  81.   } 
  82. $link=new doubleLinkList(); 
  83. $link->insertLink(1); 
  84. $link->insertLink(2); 
  85. $link->insertLink(3); 
  86. $link->insertLink(4); 
  87. $link->insertLink(5); 
  88. $link->delLink(3); 
  89. $link->printFromFront(); 
  90. $link->printFromEnd(); 
  91. $link->delLink(6); 

运行结果:

1,2,4,5

5,4,2,1,head

没有值为6的节点

Tags: PHP双链表删除 PHP插入节点

分享到: