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实现的更多相关文章

  1. 数据结构与算法(c++)——反转链表

    算法概述:要求实现将一条单向链表反转并考虑时间复杂度. 算法分析: 数组法(略): 将列表元素逐个保存进数组,之后再逆向重建列表 点评:实现逻辑最简单,需要额外的内存开销. 移动指针: 通过三个指针逐 ...

  2. 反转链表的golang实现

    问题:反转一个单链表. 输入: ->->->->->NULL 输出: ->->->->->NULL 首先先认识一下链表这个数据结构: 链表节 ...

  3. 数据结构-单链表-类定义2-C++

    上一次的C++链表实现两个单链表的连接不太理想,此次听了一些视频课,自己补了个尾插法,很好的实现了两个链表的连接,当然了,我也是刚接触,可能是C++的一些语法还不太清楚,不过硬是花了一些时间尽量在数据 ...

  4. 数据结构之链表(LinkedList)(一)

    链表(Linked List)介绍 链表是有序的列表,但是它在内存中是存储如下 1)链表是以节点方式存储的,是链式存储 2)每个节点包含data域(value),next域,指向下一个节点 3)各个节 ...

  5. 【剑指Offer面试编程题】题目1518:反转链表--九度OJ

    题目描述: 输入一个链表,反转链表后,输出链表的所有元素. (hint : 请务必使用链表) 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行为一个整数n(0< ...

  6. 如何k个一组反转链表

    之前的文章「递归反转链表的一部分」讲了如何递归地反转一部分链表,有读者就问如何迭代地反转链表,这篇文章解决的问题也需要反转链表的函数,我们不妨就用迭代方式来解决. 本文要解决「K 个一组反转链表」,不 ...

  7. leetcode 练习--反转链表

    最近开始学习数据结构和算法的学习,也自然开始在 leetcode 上练习,所以每周大概会分享做过的leetcode 练习,尽量做到每天更新一道题目. 作为 leetcode 练习笔记的第一道题目,选择 ...

  8. 学习javascript数据结构(二)——链表

    前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...

  9. 剑指Offer面试题:15.反转链表

    一.题目:反转链表 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点. 链表结点定义如下,这里使用的是C#描述: public class Node { public in ...

随机推荐

  1. 1-学习tecplot360

    FETRIANGLE(3节点三角形), FEQUADRILATERAL(4节点四边形),FETETRAHEDRON(4节点四面体), FEBRICK(8节点六面体) 参考:https://wenku. ...

  2. document.getElementById("xx").style.xxx中的 全部属性

    CSS语法(不区分大小写) JavaScript语法(区分大小写) border border border-bottom borderBottom border-bottom-color borde ...

  3. 不修改模板的前提下修改VisualState中的某些值

    原文链接:不修改模板的前提下修改VisualState中的某些值 - 超威蓝火 UWP里有一件非常令人不爽的事,大部分控件只提供了Normal状态下的Background,Foreground,Bor ...

  4. Learning WCF:Life Cycle of Service instance

    示例代码下载地址:WCFDemo1Day 概述 客户端向WCF服务发出请求后,服务端会实例化一个Service对象(实现了契约接口的对象)用来处理请求,实例化Service对象以及维护其生命周期的方式 ...

  5. jdk8新特性(详解)

    最近在复习外加看点面试题,jdk8的新特性虽然在项目用用到过一两个,准备系统的了解一下jdk8的常用新特性 一:Lambd表达式 也可称为闭包         引入函数式编程到Java中 为了使现有函 ...

  6. git关于文件权限修改引起的冲突及忽略文件权限的办法

    我们在使用git进行版本管理的时候,有时候只是修改了文件的权限,比如将pack.php修改为777,但其实文件内容并没有改变,但是git会认为此文件做了修改,原因是git把文件权限也算作文件差异的一部 ...

  7. Http请求-get和post的区别

    GET和POST是HTTP请求的两种基本方法. 最直观的区别就是GET把参数包含在URL中,以?的方式来进行拼接,POST通过request body传递参数.并且GET请求在URL中传送的参数是有长 ...

  8. Python中通过threshold创建mask

    [code] import numpy as np threshold=2 a=np.array([[1,2,3],[3,4,5]]) b=a>threshold print("a=& ...

  9. 11.10 vue

    https://vuejs.org/js/vue.js ide   typora v-pre 指令 vuex text script . 语法 BCF 终端输入 node -v npm -v  包管理 ...

  10. 转载:https原理:证书传递、验证和数据加密、解密过程解析

    写的太好了,就是我一直想找的内容,看了这个对https立马明白多了 http://www.cnblogs.com/zhuqil/archive/2012/07/23/2604572.html 我们都知 ...