[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 ...
随机推荐
- python模块:time
# encoding: utf-8 # module time # from (built-in) # by generator 1.145 """ This modul ...
- CSS Grid
效果图如上所示 <!DOCTYPE html> <html> <head> <title>练习</title> </head> ...
- visual studio 2017使用技巧
visual studio 2017使用技巧 批量删除代码中的空白行 Ctrl + H, 查找: ^(?([^\r\n])\s)*\r?$\r?\n 替换: 使用正则表达式 当前文档 常用快捷键 注释 ...
- 向jsp中引入公共文件
前沿,在网页开发中,总会存在某几个.js或者某几个.css是所有.jsp文件的公用文件,为了方便引用 我们把这些在公共的.js及.css文件放到一个.jsp文件中,只需要将这个引入所有公共.js及.c ...
- [.net core学习] .net core中的MD5CryptoServiceProvider取代方法
使用:MD5 m5 = MD5.Create(); 参考:http://stackoverflow.com/questions/27216121/alternatives-of-md5cryptose ...
- 利用PHP扩展Taint找出网站的潜在安全漏洞实践
一.背景 笔者从接触计算机后就对网络安全一直比较感兴趣,在做PHP开发后对web安全一直比较关注,2016时无意中发现Taint这个扩展,体验之后发现确实好用:不过当时在查询相关资料时候发现关注此扩展 ...
- C#6.0语言规范(二) 词法结构
程式 AC#程序由一个或多个源文件组成,正式称为编译单元(编译单元).源文件是Unicode字符的有序序列.源文件通常与文件系统中的文件一一对应,但不需要此对应关系.为了获得最大的可移植性,建议使用U ...
- [转]SQL SERVER整理索引碎片测试
SQL SERVER整理索引碎片测试 SQL SERVER整理索引的方法也就这么几种,而且老是自作聪明的加入智能判断很不爽,还是比DBMS_ADVISOR差远了: 1SQL SERVER 2000/2 ...
- 课程四(Convolutional Neural Networks),第二 周(Deep convolutional models: case studies) —— 1.Practice questions
[解释] 应该是same padding 而不是 valid padding . [解释] 卷积操作用的应该是adding additional layers to the network ,而是应该 ...
- MySQL笔记(8)---备份与恢复
1.前言 本章记录数据库的备份与恢复操作.MySQL提供了很多工具完成备份工作:mysqldump.ibbackup.replication,也可以使用一些第三方的工具完成,如xtrabacup.LV ...