php实现反转链表(链表题一定记得画图)(指向链表节点的指针本质就是一个记录地址的变量)($p->next表示的是取p节点的next域里面的数值,next只是p的一个属性)
php实现反转链表(链表题一定记得画图)(指向链表节点的指针本质就是一个记录地址的变量)($p->next表示的是取p节点的next域里面的数值,next只是p的一个属性)
一、总结
链表反转两种实现方式:a、头插法(遍历一遍链表即可实现链表反转) b、借助数组反转(遍历一遍链表将数值存在数组,反转数组,将数组里面的值尾插法插入链表,返回链表)
链表题一定记得画图
指向链表节点的指针本质就是一个记录地址的变量($p=链表,$p里面记录的就是一个地址),节点的next域里面记录的是下一个变量的地址
$p->next表示的是取p节点的next域里面的数值,next只是p的一个属性

二、php实现反转链表
题目描述:
代码:
代码一
<?php
/*class ListNode{
var $val;
var $next = NULL;
function __construct($x){
$this->val = $x;
}
}*/
/*
思路: pHead始终指向要反转的结点
last 指向反转后的首结点
每反转一个结点,把pHead结点的下一个结点指向last, last指向pHead成为反转后首结点,
再把pHead向前移动一个结点直至None结束 */
function ReverseList($pHead)
{
if($pHead == null){ //1、这里多了一个判断
return null;
}
$pre = null; //2、pre是一个非常普通的变量,而不是节点变量,里面记录的是节点的地址,也算是节点变量
while($pHead != null){ //3、算法思路是把前面节点的地址拿到,放到下一个节点的next域中
$tmp = $pHead->next;
$pHead->next = $pre;
$pre = $pHead;
$pHead = $tmp;
}
return $pre; }
代码二(也是ac)
<?php
/*class ListNode{
var $val;
var $next = NULL;
function __construct($x){
$this->val = $x;
}
}*/
//算法考点:链表的头插法和尾插法,头插法即可实现链表反转
//链表反转也可以借助数组反转来实现
function ReverseList($pHead)
{
$head = null;
//$end = null; //1、这两句话可有可无
//$head->next=$end;
while($pHead){
//$p=$pHead; //2、不能这样赋值
$p = new ListNode($pHead->val);
$p->next=$head->next;
$head->next=$p; //4、$head哪来的next域,无语了
$pHead=$pHead->next;
}
return $head->next; //3、输出的时候发现多了一个0,所以用$head->next消除前面的那个0 5、前面多的那个0是head的0,php把它当成了一个node节点变量
}
代码三:深入理解链表后的AC
算法思路:就是将前面节点的地址放到后面节点的next域中实现链表反转
<?php
/*class ListNode{
var $val;
var $next = NULL;
function __construct($x){
$this->val = $x;
}
}*/
//算法考点:链表的头插法和尾插法,头插法即可实现链表反转
//链表反转也可以借助数组反转来实现
function ReverseList($pHead)
{
$pre=null;
while($pHead){
$tmp=$pHead->next; //
$pHead->next=$pre; //1、将$pre变量里面记录的地址给$pHead的next域
$pre = $pHead; //2、将$pHead的值(一个地址)给$pre变量
$pHead=$tmp;
}
return $pre;
}
php实现反转链表(链表题一定记得画图)(指向链表节点的指针本质就是一个记录地址的变量)($p->next表示的是取p节点的next域里面的数值,next只是p的一个属性)的更多相关文章
- 链表算法题二,还原题目,用debug调试搞懂每一道题
文章简述 大家好,本篇是个人的第4篇文章. 承接第3篇文章<开启算法之路,还原题目,用debug调试搞懂每一道题>,本篇文章继续分享关于链表的算法题目. 本篇文章共有5道题目 一,反转链表 ...
- LeetCode 上最难的链表算法题,没有之一!
题目来源于 LeetCode 第 23 号问题:合并 K 个排序链表. 该题在 LeetCode 官网上有关于链表的问题中标注为最难的一道题目:难度为 Hard ,通过率在链表 Hard 级别目前最低 ...
- leecode刷题(21)-- 删除链表的倒数第N个节点
leecode刷题(21)-- 删除链表的倒数第N个节点 删除链表的倒数第N个节点 描述: 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2- ...
- leecode刷题(20)-- 删除链表中的节点
leecode刷题(20)-- 删除链表中的节点 删除链表中的节点 描述: 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点. 现有一个链表 -- head = ...
- [LC]83题 Remove Duplicates from Sorted List(删除排序链表中的重复元素)(链表)
①英文题目 Given a sorted linked list, delete all duplicates such that each element appear only once. Exa ...
- 剑指Offer编程题(Java实现)——链表中倒数第k个结点
题目描述 输入一个链表,输出该链表中倒数第k个结点. 注意: 该题目不可以用先反转链表再输出第k个结点的方式,因为反转链表会改变该结点的next指向 思路一 使用栈Stack倒序存储,顺序pop第k个 ...
- 链表算法题之中等级别,debug调试更简单
文章简述 大家好,本篇是个人的第 5 篇文章 从本篇文章开始,分享关于链表的题目为中等难度,本次共有 3 道题目. 一,两数相加 1.1 题目分析 题中写到数字是按照逆序的方式存储,从进位的角度看,两 ...
- 2021字节跳动校招秋招算法面试真题解题报告--leetcode19 删除链表的倒数第 n 个结点,内含7种语言答案
2021字节跳动校招秋招算法面试真题解题报告--leetcode19 删除链表的倒数第 n 个结点,内含7种语言答案 1.题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. ...
- IT公司100题-7-判断两个链表是否相交
问题:有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环.1.如何判断一个链表是不是这类链表? 问题扩展:1.如果链表可能有环呢?2.如果需 ...
随机推荐
- 01-Jvm 内存区域复习笔记
Java内存区域 1.程序计数器(Program Counter Register) 在虚拟机中一块较小的内存空间.它的作用能够看做是当前线程所运行的字节码的行号指示 ...
- Hadoop权威指南学习笔记三
HDFS简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考.有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.net/my ...
- eclipse- DDMS截图功能使用
如何使用eclipse的截图功能呢 1.打开eclipse 2.连接手机 3.打开eclipse的DDMS插件. 4.选中手机 5.点击上面的摄像机图标,就可以截图了 如果你打开了DDMS以后,没有发 ...
- HDU 1197 Specialized Four-Digit Numbers
Specialized Four-Digit Numbers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- HDU 2281 Square Number Pell方程
http://acm.hdu.edu.cn/showproblem.php?pid=2281 又是一道Pell方程 化简构造以后的Pell方程为 求出其前15个解,但这些解不一定满足等式,判断后只有5 ...
- C#如何调用非托管的C++Dll
现在在Windows下的应用程序开发,VS.Net占据了绝大多数的份额.因此很多以前搞VC++开发的人都转向用更强大的VS.Net.在这种情况下,有很多开发人员就面临了如何在C#中使用C++开发好的类 ...
- 转换PHP脚本成为windows的执行程序
转换PHP脚本成为windows的执行程序 Convert a PHP script into a stand-alone windows executable I want to automate ...
- setting-在设置中添加新的选项
如下图的“通知栏调出方式” 具体实现如下 1.在 res/xml/settings_headers.xml 文件中添加如下内容 <preference-headers xmlns:android ...
- socket UDP简单通讯
// // SocketUDPServerClient.m // socket_server_client // // Created by lujunjie on 2016/11/26. // Co ...
- POJ2029:Get Many Persimmon Trees(二维树状数组)
Description Seiji Hayashi had been a professor of the Nisshinkan Samurai School in the domain of Aiz ...