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.如果需 ...
随机推荐
- ActiveMQ学习总结(7)——ActiveMQ使用场景
MQ简介: MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们.消息传 ...
- 洛谷 P1358 扑克牌
P1358 扑克牌 题目描述 组合数学是数学的重要组成部分,是一门研究离散对象的科学,它主要研究满足一定条件的组态(也称组合模型)的存在.计数以及构造等方面的问题.组合数学的主要内容有组合计数.组合设 ...
- 用了Redis里面的map和set
map的操作用 hset,hget等 set的操作有 sadd sismember等 参考下面: http://blog.csdn.net/kwsy2008/article/details/48467 ...
- WordPress出现Briefly unavailable for scheduled maintenance. Check back in a minute. 的解决方法
WordPress出现 Briefly unavailable for scheduled maintenance. Check back in a minute. 解决方法: 登入FTP,然后把Wo ...
- 6lession-基本数据类型
因为自己是根据网上教程学习的,所以以下内容参考自 http://www.w3cschool.cc/python/python-variable-types.html python支持物种数据类型,分别 ...
- Android学习笔记进阶21之设置壁纸
别忘记在ApplicationManifest.xml 中加上权限的设置. <uses-permission Android:name = "android.permission.SE ...
- android图像处理(3)浮雕效果
这篇将讲到图片特效处理的浮雕效果.跟前面一样是对像素点进行处理,算法是通用的. 算法原理:用前一个像素点的RGB值分别减去当前像素点的RGB值并加上127作为当前像素点的RGB值. 例: ABC 求B ...
- 【编程】概念的理解 —— socket
socket:A socket is something into which something is plugged or fitted (also called a receptacle). A ...
- 关于bcg库记忆界面的问题及其解决办法
作者:朱金灿 来源:http://blog.csdn.net/clever101 今天同事向我请教一个问题,说他使用BCG创建了一个停靠栏,之后把代码注释了,但是程序启动时总出现一个Debug Ass ...
- 新手前端笔记之--初识css
css样式表是为了容纳与html文档分离出来的样式属性而产生的,所以她理所当然的包含两个部分:1.样式的表示,使用{属性1:属性值:属性2:属性值:...},2.样式与标签的对应(如何找的对应标签), ...