php实现双向链表
程序员文章站
2022-04-25 11:45:30
...
跳至
$n=10;//个数 class link{ public $val; public $next=null; public $pre=null; static $num=0; //初始化 function __construct($num) { $this->val=$num; self::$num++;//别忘记self是一般指向静态变量 静态方法的指针 而this则是初始化后指向对象的指针 } //访问结点 function read_link($val,$head) { $one=$head->next; while($one->valnext;} if($one==$head) {echo 'not exist this node!';return;} return $one; } //对象个数 function __get($num) { return self::$num; } //按照大小增加结点 function add_link($val,$head) { $one=$head->next; while($one!=$head){ if($one->valnext;continue;} else if($one->val=$val){echo 'linknode is already exist!';return;} else if($one->val>$val) break; } $pre=$one->pre; $cur=new link($val); $pre->next=$cur; $one->pre=$cur; $cur->next=$one; $cur->pre=$pre; return $cur; } //删除该结点 function delete_node($val,$head) { $one=$head->next; while($one!=$head) { if($one->val!=$val) {$one=$one->next;continue;} else break; } if($one==$head) {echo 'not exist linknode!';return;} else{ $pre=$one->pre; $next=$one->next; $pre->next=$next; $next->pre=$pre; $one=new link(NULL);//引用变量值改变不影响被引用变量的值 //unset($one);只是引用数减1 并不能删除 } return $one; } } $head=new link(null); for($i=1;$inext=$cur; $cur->pre=$head; }else if($i==$n){//最后一次则和头结点在一起 $cur=new link($i); $temp->next=$cur; $cur->next=$head; $head->pre=$cur; } else{ $cur=new link($i); $temp->next=$cur; $cur->pre=$temp; } } //var_dump($head->read_link(10,$head)->val);访问结点 //var_dump($head->add_link(10,$head));//增加结点 //var_dump($head->add_link(100,$head)->val); //var_dump($head->delete_node(102,$head));//删除结点 //var_dump($head->delete_node(10,$head)->val); //var_dump($head->read_link(10,$head)->val); /* $a=1; $b=$a; $b=NULL; echo $a;//看来引用变量改变值的时候 两个变量就独立咯 //unset($b); $a=NULL;var_dump($b);//看来变量有引用和被引用的关系 echo $a; */