[PHP] 数据结构-反转链表PHP实现
1.常见方法分为迭代和递归,迭代是从头到尾,递归是从尾到头
2.设置两个指针,old和new,每一项添加在new的后面,新链表头指针指向新的链表头
3.old->next不能直接指向new,而是应该设置一个临时指针tmp,指向old->next指向的地址空间,保存原链表数据,然后old->next指向new,new往前移动到old处new=old,最后old=tmp取回数据
while(old!=null){
tmp=old->next
old->next=new
new=old
old=tmp
}
<?php
class Node{
public $data;
public $next;
}
//头插法创建一个链表
$linkList=new Node();
$linkList->next=null;//头结点
for($i=1;$i<=10;$i++){
$node=new Node();
$node->data="aaa{$i}";//创建新结点$node
$node->next=$linkList->next;//$node->next指向头结点->next
$linkList->next=$node;//头结点->next指向$node
} var_dump($linkList); function ReverseList($pHead){
$old=$pHead->next;//跳过头结点
$new=null;
$tmp=null;
//反转过程
while($old!=null){
$tmp=$old->next;
$old->next=$new;
$new=$old;
$old=$tmp;
}
//给新链表加个头结点
$newHead=new Node();
$newHead->next=$new;
var_dump($newHead);
}
ReverseList($linkList);
object(Node)#1 (2) {
["data"]=>
NULL
["next"]=>
object(Node)#11 (2) {
["data"]=>
string(5) "aaa10"
["next"]=>
object(Node)#10 (2) {
["data"]=>
string(4) "aaa9"
["next"]=>
object(Node)#9 (2) {
["data"]=>
string(4) "aaa8"
["next"]=>
object(Node)#8 (2) {
["data"]=>
string(4) "aaa7"
["next"]=>
object(Node)#7 (2) {
["data"]=>
string(4) "aaa6"
["next"]=>
object(Node)#6 (2) {
["data"]=>
string(4) "aaa5"
["next"]=>
object(Node)#5 (2) {
["data"]=>
string(4) "aaa4"
["next"]=>
object(Node)#4 (2) {
["data"]=>
string(4) "aaa3"
["next"]=>
object(Node)#3 (2) {
["data"]=>
string(4) "aaa2"
["next"]=>
object(Node)#2 (2) {
["data"]=>
string(4) "aaa1"
["next"]=>
NULL
}
}
}
}
}
}
}
}
}
}
}
object(Node)#12 (2) {
["data"]=>
NULL
["next"]=>
object(Node)#2 (2) {
["data"]=>
string(4) "aaa1"
["next"]=>
object(Node)#3 (2) {
["data"]=>
string(4) "aaa2"
["next"]=>
object(Node)#4 (2) {
["data"]=>
string(4) "aaa3"
["next"]=>
object(Node)#5 (2) {
["data"]=>
string(4) "aaa4"
["next"]=>
object(Node)#6 (2) {
["data"]=>
string(4) "aaa5"
["next"]=>
object(Node)#7 (2) {
["data"]=>
string(4) "aaa6"
["next"]=>
object(Node)#8 (2) {
["data"]=>
string(4) "aaa7"
["next"]=>
object(Node)#9 (2) {
["data"]=>
string(4) "aaa8"
["next"]=>
object(Node)#10 (2) {
["data"]=>
string(4) "aaa9"
["next"]=>
object(Node)#11 (2) {
["data"]=>
string(5) "aaa10"
["next"]=>
NULL
}
}
}
}
}
}
}
}
}
}
}
[PHP] 数据结构-反转链表PHP实现的更多相关文章
- 数据结构与算法(c++)——反转链表
算法概述:要求实现将一条单向链表反转并考虑时间复杂度. 算法分析: 数组法(略): 将列表元素逐个保存进数组,之后再逆向重建列表 点评:实现逻辑最简单,需要额外的内存开销. 移动指针: 通过三个指针逐 ...
- 反转链表的golang实现
问题:反转一个单链表. 输入: ->->->->->NULL 输出: ->->->->->NULL 首先先认识一下链表这个数据结构: 链表节 ...
- 数据结构-单链表-类定义2-C++
上一次的C++链表实现两个单链表的连接不太理想,此次听了一些视频课,自己补了个尾插法,很好的实现了两个链表的连接,当然了,我也是刚接触,可能是C++的一些语法还不太清楚,不过硬是花了一些时间尽量在数据 ...
- 数据结构之链表(LinkedList)(一)
链表(Linked List)介绍 链表是有序的列表,但是它在内存中是存储如下 1)链表是以节点方式存储的,是链式存储 2)每个节点包含data域(value),next域,指向下一个节点 3)各个节 ...
- 【剑指Offer面试编程题】题目1518:反转链表--九度OJ
题目描述: 输入一个链表,反转链表后,输出链表的所有元素. (hint : 请务必使用链表) 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行为一个整数n(0< ...
- 如何k个一组反转链表
之前的文章「递归反转链表的一部分」讲了如何递归地反转一部分链表,有读者就问如何迭代地反转链表,这篇文章解决的问题也需要反转链表的函数,我们不妨就用迭代方式来解决. 本文要解决「K 个一组反转链表」,不 ...
- leetcode 练习--反转链表
最近开始学习数据结构和算法的学习,也自然开始在 leetcode 上练习,所以每周大概会分享做过的leetcode 练习,尽量做到每天更新一道题目. 作为 leetcode 练习笔记的第一道题目,选择 ...
- 学习javascript数据结构(二)——链表
前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...
- 剑指Offer面试题:15.反转链表
一.题目:反转链表 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点. 链表结点定义如下,这里使用的是C#描述: public class Node { public in ...
随机推荐
- Jmeter安装与实例
安装步骤: 安装环境:Windows7 安装包:JDK安装包:Jmeter安装包: 环境变量配置:变量名JAVA_HOME 值:jdk的安装路径 变量名CLASSPATH值:.;%JAV ...
- RxSwift学习笔记7:buffer/window/map/flatMap/flatMapLatest/flatMapFirst/concatMap/scan/groupBy
1.buffer的基本使用 let publishSubject = PublishSubject<String>() //buffer 方法作用是缓冲组合,第一个参数是缓冲时间,第二个参 ...
- SDWebImage源码分析
1.概述 SDWebImage是iOS开发中,被广泛使用的一个第三方开源库,提供了图片从加载.解析.处理.缓存.清理等一些列功能,让我们能够专心于业务的处理.本篇会从SDWebImage的源码,来一步 ...
- WPF常用样式总结
常用控件样式: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation ...
- zookeeper日志级别
查看源代码得知zookeeper(版本3.4.13)内部的日志用的slf4j,项目启动zk连接了之后一直在打debug日志(如下所示),甚是讨厌,logback日志级别调成info没用. 17:24: ...
- es2017新特性
2017年6月底es2017不期而至; 截止目前es8是ecmascript规范的第九个版本:自es2015开始ECMA协会将每年发布一个版本并将年号作为版本号:算了 直接看下es2017的新特性: ...
- hadoop安装hive及java调用hive
1.安装hive 在安装hive前,请确保已经安装好了hadoop,如未安装,请参考centoos 安装hadoop集群进行安装: 1.1.下载,解压 下载hive2.1.1:http://mirr ...
- 使用 mybatis-generator 自动生成 MyBatis 代码
首先把这三个文件放到一个目录里,我是放到了C盘下的wangbo目录下: 接下来就是设置config.xml文件了,config.xml: <?xml version="1.0" ...
- 解决element-ui upload组件报错 Avoid using non-primitive value as key, use string/number value instead
到底是啥错呢,就是要求你的key必须是string或者number类型 那么解决就是找到这个报错的key(在node_modules/element-ui/lib/element-ui.common. ...
- kaili Linux学习推荐网站
kaili学习推荐网站 kail中文网:http://www.kali.org.cn/forum.php?gid=67 Kali官方教材:https://kali.training/ Kali Lin ...