<?php /*** * 单链表 */ //节点,下标,节点名称,下一个节点的地址 class Node { public $id; public $name; public $next; public function __construct($id, $name) { $this->id = $id; $this->name = $name; $this->next = null; } } class SingleLinkList { private $header; public function __construct($id=null,$name=null) { $this->header=new Node($id,$name); } /** * 获取单链表的长度 */ public function getLinkLength(){ $i = 0; $current = $this->header; while($current->next !=null){ $i++; $current = $current->next; } return $i; } /** * 添加节点到单链表中(原理就是插入当前的节点的位置存储的下一个节点的信息,上一个节点存储当前节点的信息) * @param $node 节点 */ public function addLink($node){ $current = $this->header; while($current->next!=null){ if($current->next->id > $node->id){ break; } $current = $current->next; } $node->next = $current->next; $current->next = $node; } /** * 删除节点(删除的节点的下一个位置保持在上一个节点中) * @param $id */ public function delLink($id){ $current = $this->header; $flag = false; while($current->next!=null){ if($current->next->id == $id){ $flag = true; break; } $current = $current->next; } if($flag){ //说明找到了节点 $current->next = $current->next->next; }else{ echo '未找到该节点'.$id.'的信息'; } } /** * 判断单链表是否为空 * @return bool */ public function isEmpty(){ return $this->header == null; } /** * 清空单链表 */ public function clear(){ $this->header=null; } /** * 获取链表的信息 */ public function getLinkList(){ $current = $this->header; if($current->next==null){ echo '链表为空'; return; } while($current->next != null){ echo 'id:'.$current->next->id.',节点名称为'.$current->next->name.'<br/>'; if($current->next->next == null){ break; } $current=$current->next; } } /** * 获取某个节点信息 * @param $id * @return string */ public function getLinkNameById($id){ $current = $this->header; if($current->next==null){ return ''; } while($current->next != null){ if($current->id == $id){ return $current->name; } $current=$current->next; } } /** * 更新某个节点名称 * @param $id * @param $name */ public function updateLink($id,$name){ $current = $this->header; if($current->next==null){ return ''; } while($current->next != null){ if($current->id == $id){ return $current->name=$name; } $current=$current->next; } } } header('Content-Type:text/html;charset=utf8'); $lists = new SingleLinkList(); $lists->addLink ( new node ( 5, 'eeeeee' ) ); $lists->addLink ( new node ( 1, 'aaaaaa' ) ); $lists->addLink ( new node ( 6, 'ffffff' ) ); $lists->addLink ( new node ( 4, 'dddddd' ) ); $lists->addLink ( new node ( 3, 'cccccc' ) ); $lists->addLink ( new node ( 2, 'bbbbbb' ) ); $lists->getLinkList (); echo "<br>-----------删除节点--------------<br>"; $lists->delLink ( 5 ); $lists->getLinkList (); echo "<br>-----------更新节点名称--------------<br>"; $lists->updateLink ( 3, "222222" ); $lists->getLinkList (); echo "<br>-----------获取节点名称--------------<br>"; echo $lists->getLinkNameById ( 5 ); echo $lists->getLinkNameById ( 4 ); echo "<br>-----------获取链表长度--------------<br>"; echo $lists->getLinkLength ();