PHP模拟链表_学习链表的一些操作

来源:互联网 发布:mac电脑双系统切换 编辑:程序博客网 时间:2024/04/30 07:35

ListNode.class.php  定义一个节点类

class ListNode{private $_nodeName;private $_nodeValue;private $_next=null;public function __construct($node_name,$node_value){$this->_nodeName = $node_name;$this->_nodeValue=$node_value;}public function __set($key,$value){$this->{'_'.$key} = $value;}public function __get($key){return $this->{'_'.$key};}public function __toString(){return $this->nodeName.'---'.$this->nodeValue.'<br>';}}
ListUtil.class.php  模仿redis的链表,定义一个管理节点的链表

class ListUtil{public $head = null;public $length = 0;public function __construct(array $param=null){if($param){$this->head = $this->createList($param);}}public function createList(array $param){if(count($param)){$this->head = $param[0];$this->length=1;for($i=0;$i<count($param)-1;$i++){$param[$i]->next = $param[$i+1];$this->length++;}return $this->head;}else{return false;}}//在节点p后插入节点inspublic function insertListNode(ListNode $p,ListNode $ins){$s = $p->next;if($s){$ins->next = $p->next;$p->next = $ins;}else{$p->next = $ins;}$this->length++;}public function findListNode($index){$p = $this->head;for($i=0;$i<$this->length;$i++){if($i==$index){return $p;}else{$p = $p->next;}}}public function deleteListNode(ListNode $del){if($this->head){if($this->head == $del){$this->head = null;}else{$p = $this->head;while($p){if($p->next!=$del){$p = $this->head->next;}else{$p->next = $p->next->next;$this->length--;return true;}}}}else{return false;}}public function reverseListNode(){if($this->head==null || $this->head->next==null){return false;}$current = $this->head;$p_next  = $current->next;$current->next = null;while($p_next){$prev = $p_next->next;$p_next->next = $current;$current = $p_next;$p_next = $prev;}$this->head = $current;return true;}public function __get($key){return $this->{$key};}public function __set($key,$value){$this->{$key} = $value;}public function __toString(){$lis = $this->head;$v = '';while(!$lis){$v = $v . '---'.$lis->nodeName.'<br>';$lis = $this->head->next;}return $v;}}

可以继续扩展ListUtil类。

测试文件:

require 'ListNode.class.php';require 'ListUtil.class.php';$list = new ListNode('zhao','23');$list_1 = new ListNode('li','28');$list_2 = new ListNode('wang','20');$list_3 = new ListNode('zhang','19');$list_4 = new ListNode('uuu','99');$array = array($list,$list_1,$list_2,$list_3,$list_4);//var_dump($array);$list_util = new ListUtil();$res = $list_util->createList($array);/*if($list_util->deleteListNode($list_2)){echo $list_util->length.'<br>';var_dump($list_util->head);}else{echo 'false';}*//*if($list_util->reverseListNode()){echo $list_util->head->nodeName.'<br>';echo '<pre>';var_dump($list_util->head);echo '</pre>';}else{echo 'false';}*/$p = $list_util->findListNode($list_util->length-1);var_dump($p);



1 0
原创粉丝点击