PHP实现 单链表
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP实现 单链表,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2532字,纯文字阅读大概需要4分钟。
内容图文
![PHP实现 单链表](/upload/InfoBanner/zyjiaocheng/832/350eb71204c34d488e7708162b5824e3.jpg)
<?php
/**
* Created by PhpStorm.
* User: BaiMayou
* Date: 2019/2/23
* Time: 14:22
*/
/*
* php,java这种面向对象行的语言,需要通过类的方式来定义链表,c,c++则可以直接定义一个链表
* 所以对链表的定义直接影响到对链表的操作,这里采用的是最接近c的链表定义的一种,同时也是大部分面试的算法题中给出的单链表的定义
*/
//单链表的定义
class ListNode{
public $data = '';//链表的数据域
public $next = null;//链表的指针域
public function __construct($val)
{
$this->data = $val;
}
}
/*
* 单链表的操作
* 对于单链表的操作有基本的在末尾增加,删除新节点,统计节点数量,遍历单链表
* 稍复杂的是在指定位置增加,删除,修改等
* 对应的算法有链表的逆转,查环等
* 所以完成这些功能时,即便很细心,但是因为类的原因或者写的不够完善,而产生一些奇怪的错误。例如,头结点,和head到底表示什么这些问题
* 从代码上我们可以看到,$head表示的就是一个的对象,每一个对象的next属性中存放着另一个对象或null,!
* 在理解的时候需要我们抽象为链表的结构,这样更容易理解,而$head表示指针指向的位置,所以指针一开始在链表的第一个节点位置,及头结点;
* $head->next = $a 也就表示在链表中,head节点的next指针域中存放着节点a的地址,对应为结构图就为:!
*
* 有时候还会影响我们对这些数据结构的理解,这也是在写算法中多使用c,c++等面向过程的语言的原因之一。
*/
//可以发现每个节点的next指针域中存放着一个对象,这个对象就是定义的单链表的一个节点
//
//统计节点数量
function CountNode($head){
$current = $head;//将当前节点设置为头结点
$i = 0;
while(!is_null($current->next)){
++$i;
$current = $current->next;
}
return $i;
}
//遍历节点
function fetchNode($head){
$current = $head;//在此需要注意一个问题,在php中对象的赋值,其实是对象地址的赋值,即$current = &$head,所以操作$current就相当于操作$head
while(!is_null($current->next)){
$current = $current->next;
echo $current->data.'->';
}
}
//在末尾增加节点(原理就是通过遍历链表,在链表末尾插入一个值为val,next为null的节点)
function addNode($head,$val){
$current = $head;
$b = $head;
while(!is_null($current->next)){
$current = $current->next;
}
$new = new ListNode($val);
$current->next = $new;
return $b;
}
//删除节点
function delNode($head){
$current = $head;
while(!is_null($current->next)){
$current = $current->next;
}
$current->next->next = null;
}
//逆转单链表
//单链表是从第一个节点开始遍历的
function reverseList($head) {
if($head == null){
return null;
}
$pre = null;
while(!is_null($head)){
$temp = $head->next;
$head->next = $pre;
$pre = $head;
$head = $temp;
}
return $pre;
}
$head = new ListNode(null);
addNode($head,1);
echo CountNode($head);
//addNode($head,2);
//addNode($head,3);
//addNode($head,4);
//addNode($head,5);
//$a = reverseList($head);
//var_dump($a);
//fetchNode($a);
内容总结
以上是互联网集市为您收集整理的PHP实现 单链表全部内容,希望文章能够帮你解决PHP实现 单链表所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。