class Node
{
private $value;
private $next;
public function __construct($value = null)
{
$this->value = $value;
}
public function getValue()
{
return $this->value;
}
public function setValue($value)
{
$this->value = $value;
}
public function getNext()
{
return $this->next;
}
public function setNext($next)
{
$this->next = $next;
}
}
// 遍历方式,将当前节点的下一个节点缓存后更改成当前节点指针
function reverse(Node $head){
if($head == null){
return $head;
}
$pre = $head; // 取出head节点
$cur = $head->getNext(); // 把当前节点指向下一个节点
$next = null;
while($cur != null){
$next = $cur->getNext();
$cur->setNext($pre); // 把当前节点的指针指向前一个节点
$pre = $cur;
$cur = $next;
}
// 将原链表的头节点的下一个节点设置为null,再把反转后的头节点赋给head
$head->setNext(null);
$head = $pre;
return $head;
}
// 递归实现,在反转当前节点之前先反转后续节点
function reverse2(Node $head){
if($head == null || $head->getNext() == null){
return $head;
}
$reversedHead = reverse2($head->getNext());
$head->getNext()->setNext($head);
$head->setNext(null);
return $reversedHead;
}
function test(){
$head = new Node(0);
$tmp = null;
$cur = null;
// 构造一个长度为10的链表,保存头节点对象head
for ($i = 1;$i < 10 ; $i++){
$tmp = new Node($i);
if ($i == 1){
$head->setNext($tmp);
}else{
$cur->setNext($tmp);
}
$cur = $tmp;
}
$tmpHead = $head;
while ($tmpHead != null){
echo $tmpHead->getValue();
$tmpHead = $tmpHead->getNext();
}
echo "\n";
$head = reverse2($head);
while ($head != null ){
echo $head->getValue();
$head = $head->getNext();
}
}
test();
```
相关推荐
告别手动输入!用Access批量导入307种土壤数据到SWAT模型(附完整MDB操作流程)
本文详细介绍了如何利用Microsoft Access批量导入307种土壤数据到SWAT模型,显著提升数据录入效率。通过解析usersoil表结构、提供Access操作指南和VBA自动化脚本,帮助环境工程师避免手动输入错误,实现高效数据管理。文章还包含性能优化技巧和常见错误解决方案,是SWAT模型用户的实用指南。
(面试题)链表反序算法,教你10秒记住
链表逆序经常是面试中常见的一个题目,很多人觉得不好记下面我教大家两种比较好记的解法。 解法一:先上代码 void reverse(Node* pNode) { // 判断头和头next不为空,必须有两个以上的结点才能反序 if (NULL == pNode || NULL == pNode->next) { return; } // 三个指针 分别指向链表的前三个结点(注意:如果
C#报表,使用微软rdlc模板,生成Excel, PDF, Word, Image文件,使用自定义对象做数据集不连接数据库
我项目是用vs2017 建的,.NET farmwork 4.7.2 这种报表可以用于任何模式的应用,web,桌面,因为这只是生成一个文件或者文件流 步骤比较详细啰嗦,其中有讲到rdlc怎么新建设计,如果已经会设计rdlc了的可以直接跳到底部看代码的执行结果, 底部还有源码下载链接,百度盘 首先控制台安装报表包 新建rdlc 报表 建立rdlc里要用的数据模型 模型建完,或者修改都要重新...
单链表反序,逆序的两种方法
我先画一个单链表,这个单链表有4个元素。我的思路就是,每次把第二个元素提到最前面来。比如下面是第一次交换,我们先让头结点的next域指向结点a2,再让结点a1的next域指向结点a3,最后将结点a2的next域指向结点a1,就完成了第一次交换。 第一次交换 然后进行相同的交换将结点a3移动到结点a2的前面,然后再将结点a4移动到结点a3的前面就完成了反转。 第
冒险岛脚本函数大全:cm.sendYesNo和cm.warp的20个实战用法
本文深入解析了冒险岛脚本中cm.sendYesNo和cm.warp两个核心函数的20个实战应用场景。从基础的确认对话框交互、条件判断,到复杂的装备强化系统、动态传送与副本入口逻辑,文章通过大量代码示例展示了如何组合运用这两个函数,实现从简单NPC到复杂任务系统的进阶脚本开发,并分享了状态管理、错误处理与性能优化等最佳实践。
android HTTPS未校验服务器证书漏洞修复
上述代码是重写了域名校验的逻辑,每个证书里携带的域名是不可更改的,如果证书是合法的证书签发机构签发的,并且域名是和你要请求的域名对的上的,基本上就能确认你访问就服务器地址就是要访问的服务器地址,这样才是安全的。上述代码就是重新了证书校验的逻辑,信任所有的证书,正确的逻辑是要校验证书是否是可信任的证书签发机构所认证的,如果不校验的话你虽然是用了https加密传输,只要你的客户端用户信任了其他的证书哪怕是非法的证书,一样能够请求通过,而这个证书的服务器就可以解密你的报文,拿到你的隐私信息了。
链表逆序(反转链表)
链表逆序(反转链表) 一道很基础的算法题,做一下思路的分享和代码的实现,也算是自己学习的一份笔记,如有不正,请大佬们指正。 class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } class Solution { public ListNode reverseList(ListNo...
Windows正在配置Xftp6在下面的框输入包含安装程序包“Xftp 6.msi“的文件夹的路径
Windows正在配置Xftp6在下面的框输入包含安装程序包“Xftp 6.msi"的文件夹的路径
如何反转一个链表
最近在刷Leetcode中关于链表的题,发现很多题都涉及到了了链表的反转 给出一个链表[1, 2, 3, 4, 5] 反转为[5, 4, 3, 2, 1] 解决该问题可以用循环解决,而核心思想便是在循环中每次只让第I个元素插入到链表的头部 在循环之前链表长这样 1-> 2-> 3-> 4-> 5 第一次循环 2-> 1-> 3-> 4-> 5 第...
RimWorld Mod开发避坑指南:从Defs命名规范到XML结构详解(附实战代码)
本文深入解析RimWorld Mod开发中Defs文件的编写规范与高级技巧,涵盖命名冲突预防、XML结构优化及高级功能实现。通过实战代码示例,帮助开发者避开常见陷阱,提升Mod兼容性与稳定性,特别适合RimWorld Mod开发者参考。
高通平台Camera sensor bring up!
Qualcomm Camera sensor bring up!0. 准确1. Kernel 底层驱动配置1.1 dtsi1.2 pinctrl2. Chi-Cdk XML 配置2.1 sensormodule2.2 sensor3. CHECK 本文主要针对高通平台SM7250进行描述,当然高通平台可能基本都差不多【第一个项目】 —only for sensor probe sucess. 0....
反转链表详解
这些数据项通常以链表的形式组织起来,其中最近使用的数据项位于链表的头部,最久未使用的数据项位于链表的尾部。反转链表指的是将链表的头尾节点对调,使得原本链表的第一个节点变为最后一个节点,原本链表的最后一个节点变为第一个节点,其他节点的相对位置也进行相应调整。通过对反转链表算法的深入理解和实践应用,我们可以更好地掌握链表的基本操作和指针的使用,并提高编程能力和解决问题的能力。然而,锁的使用会降低程序的性能。在实际应用中,我们可能需要在反转链表的同时进行其他操作,例如计算链表长度、检查链表中的重复元素等。
Innovus时钟树综合CTS实战:从原理到signoff的完整指南
时钟树综合(CTS)是数字后端实现中保障同步电路时序收敛的核心环节,其本质是在物理层面构建低偏斜、可控延迟的全局时钟分发网络。它基于静态时序分析(STA)原理,通过平衡clock skew、insertion delay、transition time与功耗面积等多维约束,对抗工艺电压温度(PVT)变异带来的时序不确定性。技术价值在于支撑GHz级高频芯片的setup/hold签核,广泛应用于CPU、GPU、AI加速器等复杂SoC的Innovus后端流程。本文聚焦CTS在Innovus工具链中的工程落地,覆盖
反转链表与分组反转链表
1.反转链表 经典的反转链表,先上代码 public class ListNode { int data; ListNode next; public ListNode(int data) { this.data = data; } } public class PrintList { public static void print(ListNode root) { while (root != null) {
汉书HE8,好用的汇编代码编写工具
汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大
廖雪峰Python教程[完整版]
廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白
反转链表、链表内指定区间反转
链表(Linked List)是一种线性数据结构,其中的元素(通常称为节点)按顺序排列,每个节点包含两部分信息:存储数据的部分和指向下一个节点的指针或引用。链表中的每个节点通过指针连接在一起,因此它不需要在内存中连续存储。
LinePhone3.2.7(android端最新版本) sip客户端
SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/
链表学习反转链表
链表是一种线性数据结构,其中元素不是连续存储在内存中的,而是通过指针连接起来。每个节点包含两部分:数据域和指向下一个节点的指针域。链表分为单向链表和双向链表,本文主要讨论单向链表的反转。
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
算法 链表 反转链表
链表是一种常用的数据结构,它由一系列节点组成,每个节点包含数据部分和指向下一个节点的链接。反转链表是链表操作中的一个经典问题,不仅在面试中经常被问到,而且在实际项目中也有广泛的应用。这个问题可以通过先找到第 m 个节点,然后反转从第 m 到第 n 的节点,最后再将反转后的部分重新连接到原链表中来解决。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。递归法利用了递归的思想,每次将当前节点的后续部分反转,然后将当前节点连接到反转后的链表末尾。
反转链表及链表内指定区间反转
通过遍历,每一个节点的next指向前一个节点 首先有两个指针,指向前一个节点,previous,指向当前节点,current。 实现反转链表,使每个节点的next指向前一节点。但是current的next断开,就找不到当前节点的下一个节点了,所以需要next,用于保存当前节点的next。 next = current.next 下面进行第一次反转 断开 指向前一个节点 current.next = previous 将前一个节点的指针后移 previo...
链表之反转链表专题
链表之反转链表专题 如题,LeetCode 206 看到反转链表,我们要思考的核心点在于如何让链表的结点指针指向的方向反转 对于反转链表,一般有迭代或者递归两种思考方向 第一种:迭代 在这种方案中,做题总结出了双指针迭代比较高效,同时有一种双指针的迭代公式 具体的动画效果可以参考LeetCode官方题解 题解动画 while(cur!=null) { //记录当前节点的下一个节点 tmp = cur.next; //然后将当前节点指向pre cur.next = pre; //pre和cur节点
leetcode链表反转总结——全部翻转,部分反转
leetcode链表反转(递归)总结——全部翻转,部分反转 参考:步步拆解:如何递归地反转链表的一部分 由于链表反转使用迭代的思路进行实现比较简单,只是写法上比较复杂,所以这里仅整理记录一下递归反转链表的解法 一.全部反转 1.1 题目 使用递归反转链表,并返回链表 1.2 解法 /** * 递归反转链表 * @param head * @return */ public static ListNode reverseList(ListNode
反转链表、旋转链表算法总结
1. 反转链表(力扣:206) 2. 反转链表 II(力扣:92) 3. 旋转链表(力扣:61)
链表反转(全链表反转、链表区间反转)
全链表反转 /** * Reverse a linkedList, for example * 1 -> 3 -> 5 -> 7 -> 9 * 9 -> 7 -> 5 -> 3 -> 1 * @param head * @return */ public static ListNode reverse(ListNode head) { ListNode cur = head; ListNode prev = null; .
单向链表的反转
<br />昨天看优快云的一个文章提到,某公司面试时问到单向链表的反转问题,有好多程序员答不出来。以前我也没做过类似的题目,试着写了一下。<br />问题描述:已知一个单向链表,写一个函数,使得该链表的方向反转,即头变尾,尾变头,指示方向相反。<br />分析:该问题可以有两种方法,一是交换首尾两个节点的数据,而不改变其内存的存储结构,二是改变所有节点的指向下一个节点的指针。显然第二种方法更加有效。<br /> <br /> /×链表的定义和一些操作*/ typedef struct list {
324



被折叠的 条评论
为什么被折叠?



