php链表构造,用PHP实现单向链表结构

链表的结构是由一个一个节点组成的,所谓链,就是每个节点的头尾连在一起。而单向链表就是:每个节点包含了当前节点的值和下一个节点引用。双向链表就是每个节点包含了当前节点的值和上下两个节点的引用。相对于数组结构,链表的增删效率会更加高。

单向链表(示意图):

8b9e3c0cf8010369895ba47860126562.png

PHP代码实现

/**

* 链表结构

*/

class Hero{

public $no;

public $name;

public $next=null;

public function __construct($no=null,$name=null){

$this->no = $no;

$this->name = $name;

}

}

/**

* 链表操作

*/

class SingleLink{

/**

* 添加节点

*/

public function addNode($head,$node)

{

$insertNode = $head;

$afterNode = null;// 插入节点的后续节点

while ($insertNode->next!=null){

if ($node->no < $insertNode->next->no){

$afterNode = $insertNode->next;

break;

}elseif($node->no == $insertNode->next->no){

throw new \Exception('排名 '.$node->no.' 节点已存在!');

}

$insertNode = $insertNode->next;

}

if( $afterNode ){// 将后续节点拼接到当前插入节点的后面

$node->next = $afterNode;

}

$insertNode->next = $node;

}

/**

* 删除节点

*/

public function delNode($head,$no)

{

$currentNode = $head;

$prevNode = $head;

while ($currentNode->next!=null){

$currentNode = $currentNode->next;

if( $currentNode->no==$no ){

$prevNode->next = $currentNode->next;

break;

}

$prevNode = $currentNode;

}

}

/**

* 显示节点

*/

public function showNode($head)

{

$currentNode = $head;

while ($currentNode->next!=null){

$currentNode = $currentNode->next;

echo '第 '.$currentNode->no.' 名:'.$currentNode->name."
";

}

}

}

//创建一个head头,该head 只是一个头,不放入数据

$head = new Hero();

$heroList = new SingleLink();

$hero_01 = new Hero(1,'宋江');

$hero_02 = new Hero(2,'卢俊义');

$hero_03 = new Hero(3,'公孙胜');

$hero_04 = new Hero(4,'吴用');

$hero_05 = new Hero(5,'关胜');

$hero_06 = new Hero(6,'林冲');

$heroList->addNode($head, $hero_01);

$heroList->addNode($head, $hero_03);

$heroList->addNode($head, $hero_02);

$heroList->addNode($head, $hero_05);

$heroList->addNode($head, $hero_04);

$heroList->addNode($head, $hero_06);

//$heroList->addNode($head, $hero_02);

$heroList->showNode($head);

echo "
";

$heroList->delNode($head,3);

$heroList->delNode($head,5);

$heroList->showNode($head);

参考:

韩顺平PHP程序员玩转算法公开课

https://www.cnblogs.com/Starshot/p/6918569.html

https://blog.csdn.net/silent123go/article/details/52693735

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值