php链表笔记:单链表反转
<?php
/**
* Created by PhpStorm.
* User: huizhou
* Date: 2018/12/1
* Time: 11:41
*/ /**
* 1.链表的反转
* Class Node
*/
class Node
{
private $value;
private $next; public function __construct($value = null)
{
$this->value = $value;
} public function getValue()
{
return $this->value;
} public function setValue($value)
{
$this->value = $value;
} public function getNext()
{
return $this->next;
} public function setNext($next)
{
$this->next = $next;
}
} // 遍历方式,将当前节点的下一个节点缓存后更改成当前节点指针
function reverse(Node $head){ if($head == null){
return $head;
} $pre = $head; // 取出head节点
$cur = $head->getNext(); // 把当前节点指向下一个节点 $next = null;
while($cur != null){
$next = $cur->getNext();
$cur->setNext($pre); // 把当前节点的指针指向前一个节点
$pre = $cur;
$cur = $next;
} // 将原链表的头节点的下一个节点设置为null,再把反转后的头节点赋给head
$head->setNext(null);
$head = $pre; return $head;
} // 递归实现,在反转当前节点之前先反转后续节点
function reverse2(Node $head){
if($head == null || $head->getNext() == null){
return $head;
} $reversedHead = reverse2($head->getNext());
$head->getNext()->setNext($head);
$head->setNext(null); return $reversedHead;
} function test(){
$head = new Node(0);
$tmp = null;
$cur = null; // 构造一个长度为10的链表,保存头节点对象head
for ($i = 1;$i < 10 ; $i++){
$tmp = new Node($i);
if ($i == 1){
$head->setNext($tmp);
}else{
$cur->setNext($tmp);
}
$cur = $tmp;
} $tmpHead = $head;
while ($tmpHead != null){
echo $tmpHead->getValue();
$tmpHead = $tmpHead->getNext();
} echo "\n"; $head = reverse2($head); while ($head != null ){
echo $head->getValue();
$head = $head->getNext();
}
} test();
php链表笔记:单链表反转的更多相关文章
- [C++]线性链表之单链表
[文档整理系列] 线性链表之单链表 /* 问题描述:线性表____链表_____单链表 @date 2017-3-7 */ #include<iostream> using namespa ...
- 数据结构5: 链表(单链表)的基本操作及C语言实现
逻辑结构上一个挨一个的数据,在实际存储时,并没有像顺序表那样也相互紧挨着.恰恰相反,数据随机分布在内存中的各个位置,这种存储结构称为线性表的链式存储. 由于分散存储,为了能够体现出数据元素之间的逻辑关 ...
- c++学习笔记—单链表基本操作的实现
用c++语言实现的单链表基本操作,包括单链表的创建(包括头插法和尾插法建表).结点的查找.删除.排序.打印输出.逆置.链表销毁等基本操作. IDE:vs2013 具体实现代码如下: #include ...
- C++面试笔记--单链表
1.编程实现单链表删除节点. 解析:如果删除的是头节点,如下图: 则把head指针指向头节点的下一个节点.同时free p1,如下图所示: 如果删除的是中间节点,如下图所示: 则用p2的n ...
- 【Algorithm | 链表】单链表“环”、“环的起点”、“环的长度”问题
参考资料 • Floyd判圈算法 { 链接 } • 单链表“环”.“环的起点”.环的长度”问题 { 链接 } 链表环的问题 一.判断链表有换 使用两个指针slow和fast.两个指针开始时均在头节点处 ...
- js数据结构之链表(单链表、双向链表、循环链表)
首先,链表有以下特点: 1. 存储空间不固定,可灵活扩充 2.方便多次的插入和删除,效率较高 单链表 单链表是最常用的链表,其对数据的操作均为单项的,向后查找的. /* 链表(基于对象) 此处为单链表 ...
- php链表笔记:链表的检测
<?php /** * Created by PhpStorm. * User: huizhou * Date: 2018/12/2 * Time: 11:48 */ /** * 链表的检测 * ...
- Java单链表反转 详细过程
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/guyuealian/article/details/51119499 Java单链表反转 Java实 ...
- 【数据结构】单链表介绍及leetcode206题反转单链表python实现
题目传送门:https://leetcode-cn.com/problems/reverse-linked-list/ 文章目录 单链表介绍 链表 概念 种类 优缺点 单链表(slist) leetc ...
- C# 数据结构--单链表
什么是单链表 这两天看到很多有关单链表的面试题,对单链表都不知道是啥的我.经过学习和整理来分享一下啥是单链表和单链表的一些基本使用方法.最后看些网上有关单链表的面试题代码实例. 啥是单链表? 单链表是 ...
随机推荐
- 拾遗:sed&vim
一.sed查漏补缺 1.sed x,+y,从第x行的开始,向下连续y行(包含x行在内是y+1行!) f@z ~/testdir $ cat -n x.awk #!/usr/bin/awk -f BEG ...
- spark入门到精通(后续开始学习)
早几年国内外研究者和业界比较关注的是在 Hadoop 平台上的并行化算法设计.然而, HadoopMapReduce 平台由于网络和磁盘读写开销大,难以高效地实现需要大量迭代计算的机器学习并行化算法. ...
- Neo4j中实现自定义中文全文索引
数据库检索效率时,一般首要优化途径是从索引入手,然后根据需求再考虑更复杂的负载均衡.读写分离和分布式水平/垂直分库/表等手段:索引通过信息冗余来提高检索效率,其以空间换时间并会降低数据写入的效率:因此 ...
- 【转载】C# 开源库大全非常好
原文地址:http://m.blog.csdn.net/woddle/article/details/37311877 C#开源大全 商业协作和项目管理平台-TeamLab 网络视频会议软件-VMuk ...
- python包的安装
Microsoft Windows [版本 10.0.17134.228] (c) 2018 Microsoft Corporation.保留所有权利. C:\Users\Administrator& ...
- AOP与IOC的概念(即spring的核心)
a) IOC:Spring是开源框架,使用框架可以使我们减少工作量,提高工作效率并且它是分层结构,即相对应的层处理对应的业务逻辑,减少代码的耦合度.而spring的核心是IOC控制反转和AOP面向切面 ...
- [JZOJ4330] 【清华集训模拟】几何题
题目 题目大意 也懒得解释题目大意了-- 正解 正解居然是\(FFT\)? 不要看题目的那个式子这么长,也不要在那个式子上下手. 其实我们会发现,不同的\((x_i-x_j,y_i-y_j,z_i-z ...
- Spring Boot 成长之路(一) 快速上手
1.创建工程 利用IntelliJ IDEA新建一个Spring Boot项目的Web工程 2.查看初始化的spring boot项目 工程建好之后会出现如下的目录结构: 值得注意的第一件事是,整个项 ...
- thinkphp 自动加载
在3.2中,基本上无需手动加载类库文件,你可以很方便的完成自动加载. 命名空间自动加载 系统可以通过类的命名空间自动定位到类库文件,例如: 我们定义了一个类 Org\Util\Auth 类: name ...
- layui弹框文件导入
lr.ajax({ type : "post", data :formFile, url : importUrl, contentType: false,// 且已经声明了属性en ...