内容目录
<?php /** * PHP之实现双向链表 */ class Hero{ public $pre=null; public $no; public $name; public $next=null; public function __construct($no='',$name=''){ $this->no=$no; $this->name=$name; } static public function addHero($head,$hero){ $isExist=false; //判断目前这个链表是否为空 if($head->next==null){ $head->next=$hero; $hero->pre=$head; }else{ //如果不是空链表,则按排名来添加 //找到添加的位置 while($head->next!=null){ if($head->next->no > $hero->no){ break; }elseif($head->next->no == $hero->no){ $isExist=true; echo "<br>不能添加相同的编号"; }else{ $head=$head->next; } } if(!$isExist){ if($head->next!=null){ $hero->next=$head->next; $hero->next->pre=$hero; } $hero->pre=$head; $head->next=$hero; } } } //遍历 static public function showHero($head){ while($head->next!=null){ echo "<br>编号:".$head->next->no."名字:".$head->next->name; $head=$head->next; } } static public function delHero($head,$herono){ $isFind=false; while($head!=null){ if($head->no==$herono){ $isFind=true; break; } //继续找 $head=$head->next; } if($isFind){ if($head->next!=null){ $head->next->pre=$head->pre; } $head->pre->next=$head->next; }else{ echo "<br>没有找到目标"; } } } $head = new Hero(); $hero1 = new Hero(1,'1111'); $hero3 = new Hero(3,'3333'); $hero2 = new Hero(2,'2222'); Hero::addHero($head,$hero1); Hero::addHero($head,$hero3); Hero::addHero($head,$hero2); Hero::showHero($head); Hero::delHero($head,2); Hero::showHero($head);