您的位置:首页 > 编程语言 > PHP开发

php实现单链表

2015-07-19 11:04 567 查看
<?php
class node{
public $data;
public $next;
public function __construct($data=null,$next=null){
$this->data=$data;
$this->next=$next;
}
}
class SingleLinkList{
private $head;
public function __construct(){
$this->head=new node("head",null);
}
//获取链表长度
public function getLength(){
$p=$this->head->next;
$n=1;
while($p){
$p=$p->next;
$n++;
}
return $n;
}
//增加节点
public function addLink($data){
$p=new node($data);
$q=$this->head->next;
$r=$this->head;
while($q){
$r=$q;$q=$q->next;
}
$r->next=$p;
}
//删除节点
public function delLink($data){
$p=$this->head->next;
$q=$this->head;
while($p->data!=$data && $p->next!=null && $p!=null){
$q=$p;$p=$p->next;
}
if($p->data==$data){
if($q==$this->head){
$this->head->next=$p->next;
unset($p);
}
else{
$q->next=$p->next;
unset($p);
}
}else{
echo "没有找到值为{$data}的节点";
}

}
//打印链表
public function printLink(){
$p=$this->head->next;
$string="";
while($p){
$string.=$string?",":"";
$string.=$p->data;
$p=$p->next;
}
echo $string."<br>";
}
//链表排序
public function sortLink(){
$len=$this->getLength();
if($this->head->next==null)
return;
for($i=0;$i<$len;$i++){
$p=$this->head->next;
for($j=0;$j<$len-$i;$j++){
$q=$p->next;
if($q->data!=null && $q!=null && $q->data<$p->data){
$temp=$p->data;
$p->data=$q->data;
$q->data=$temp;
}else{
$p=$p->next;
}
}
}
}
//链表逆置
public function reverseLink(){
$p=$this->head->next;
$q=$p->next;
if($p==null || $q==null)
return;
$p->next=null;
while($q){
$r=$q->next;
$q->next=$p;
$p=$q;
$q=$r;
}
$this->head->next=$p;
}

}

$list=new SingleLinkList();
$list->addLink(5);
$list->addLink(4);
$list->addLink(3);
$list->addLink(2);
$list->addLink(1);
$list->printLink();
$list->delLink(3);
$list->printLink();
$list->sortLink();
$list->printLink();
$list->reverseLink();
$list->printLink();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: