链表反转

反转链表 参考:公众号labuladong 文章目录反转整个链表 - 递归反转链表前 N 个节点 - 递归反转链表的⼀部分 - 递归K 个⼀组反转链表反转整个链表 - 迭代反转 a 到 b 之间的结点 - 迭代K 个⼀组反转链表注 反转整个链表 - 递归 对于递归算法,最重要的就是明确递归函数的定义。 reverse 函数定义:输⼊⼀个节点 head ,将「以 head 为起点」的链表... 阅读详情
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();
    ```
BeautyGAN: Instance-level Facial Makeup Transfer with Deep Generative Adversarial Network(2018,妆容迁移) 论文下载地址:BeautyGAN | Proceedings of the 26th ACM international conference on Multimedia 目的:在实例级实现化妆图像和非化妆图像的妆容迁移 方法:全局域集损失和本地实例级损失合并到一个双输入/输出对抗生成网络。步骤:使用一对鉴别器将非化妆面传输到化妆域,鉴别器从域的真实样本中分辨出生成的图像。在域集迁移的基础上,采用基于不同人脸区域的像素级直方图损失来实现实例级迁移。为了保持人脸的一致性和消除伪影,在总体目标函数中加入了. 阅读详情

相关推荐

告别手动输入!用Access批量导入307种土壤数据到SWAT模型(附完整MDB操作流程)

本文详细介绍了如何利用Microsoft Access批量导入307种土壤数据到SWAT模型,显著提升数据录入效率。通过解析usersoil表结构、提供Access操作指南和VBA自动化脚本,帮助环境工程师避免手动输入错误,实现高效数据管理。文章还包含性能优化技巧和常见错误解决方案,是SWAT模型用户的实用指南。

weixin_28366053的博客 324

(面试题)链表反序算法,教你10秒记住

链表逆序经常是面试中常见的一个题目,很多人觉得不好记下面我教大家两种比较好记的解法。 解法一:先上代码 void reverse(Node* pNode) { // 判断头和头next不为空,必须有两个以上的结点才能反序 if (NULL == pNode || NULL == pNode->next) { return; } // 三个指针 分别指向链表的前三个结点(注意:如果

囍鑫雁鹫的专栏 2059

C#报表,使用微软rdlc模板,生成Excel, PDF, Word, Image文件,使用自定义对象做数据集不连接数据库

我项目是用vs2017 建的,.NET farmwork 4.7.2 这种报表可以用于任何模式的应用,web,桌面,因为这只是生成一个文件或者文件流 步骤比较详细啰嗦,其中有讲到rdlc怎么新建设计,如果已经会设计rdlc了的可以直接跳到底部看代码的执行结果, 底部还有源码下载链接,百度盘 首先控制台安装报表包 新建rdlc 报表 建立rdlc里要用的数据模型 模型建完,或者修改都要重新...

qq_35955916的博客 5202

单链表反序,逆序的两种方法

我先画一个单链表,这个单链表有4个元素。我的思路就是,每次把第二个元素提到最前面来。比如下面是第一次交换,我们先让头结点的next域指向结点a2,再让结点a1的next域指向结点a3,最后将结点a2的next域指向结点a1,就完成了第一次交换。 第一次交换 然后进行相同的交换将结点a3移动到结点a2的前面,然后再将结点a4移动到结点a3的前面就完成了反转。 第

wujiafei_njgcxy的博客 5288

冒险岛脚本函数大全:cm.sendYesNo和cm.warp的20个实战用法

本文深入解析了冒险岛脚本中cm.sendYesNo和cm.warp两个核心函数的20个实战应用场景。从基础的确认对话框交互、条件判断,到复杂的装备强化系统、动态传送与副本入口逻辑,文章通过大量代码示例展示了如何组合运用这两个函数,实现从简单NPC到复杂任务系统的进阶脚本开发,并分享了状态管理、错误处理与性能优化等最佳实践。

t4y5u6i7o的博客 1055

android HTTPS未校验服务器证书漏洞修复

上述代码是重写了域名校验的逻辑,每个证书里携带的域名是不可更改的,如果证书是合法的证书签发机构签发的,并且域名是和你要请求的域名对的上的,基本上就能确认你访问就服务器地址就是要访问的服务器地址,这样才是安全的。上述代码就是重新了证书校验的逻辑,信任所有的证书,正确的逻辑是要校验证书是否是可信任的证书签发机构所认证的,如果不校验的话你虽然是用了https加密传输,只要你的客户端用户信任了其他的证书哪怕是非法的证书,一样能够请求通过,而这个证书的服务器就可以解密你的报文,拿到你的隐私信息了。

kyzycyey的专栏 2622

链表逆序(反转链表)

链表逆序(反转链表) 一道很基础的算法题,做一下思路的分享和代码的实现,也算是自己学习的一份笔记,如有不正,请大佬们指正。 class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } class Solution { public ListNode reverseList(ListNo...

小杰瑞的博客 685

Windows正在配置Xftp6在下面的框输入包含安装程序包“Xftp 6.msi“的文件夹的路径

Windows正在配置Xftp6在下面的框输入包含安装程序包“Xftp 6.msi"的文件夹的路径

m0_56588258的博客 2470

如何反转一个链表

最近在刷Leetcode中关于链表的题,发现很多题都涉及到了了链表的反转 给出一个链表[1, 2, 3, 4, 5] 反转为[5, 4, 3, 2, 1] 解决该问题可以用循环解决,而核心思想便是在循环中每次只让第I个元素插入到链表的头部 在循环之前链表长这样 1-> 2-> 3-> 4-> 5 第一次循环 2-> 1-> 3-> 4-> 5 第...

eye_water的博客 1万+

RimWorld Mod开发避坑指南:从Defs命名规范到XML结构详解(附实战代码)

本文深入解析RimWorld Mod开发中Defs文件的编写规范与高级技巧,涵盖命名冲突预防、XML结构优化及高级功能实现。通过实战代码示例,帮助开发者避开常见陷阱,提升Mod兼容性与稳定性,特别适合RimWorld Mod开发者参考。

weixin_30790841的博客 450

高通平台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....

Understand-image 9239

反转链表详解

这些数据项通常以链表的形式组织起来,其中最近使用的数据项位于链表的头部,最久未使用的数据项位于链表的尾部。反转链表指的是将链表的头尾节点对调,使得原本链表的第一个节点变为最后一个节点,原本链表的最后一个节点变为第一个节点,其他节点的相对位置也进行相应调整。通过对反转链表算法的深入理解和实践应用,我们可以更好地掌握链表的基本操作和指针的使用,并提高编程能力和解决问题的能力。然而,锁的使用会降低程序的性能。在实际应用中,我们可能需要在反转链表的同时进行其他操作,例如计算链表长度、检查链表中的重复元素等。

Weirdo的博客 3080

Innovus时钟树综合CTS实战:从原理到signoff的完整指南

时钟树综合(CTS)是数字后端实现中保障同步电路时序收敛的核心环节,其本质是在物理层面构建低偏斜、可控延迟的全局时钟分发网络。它基于静态时序分析(STA)原理,通过平衡clock skew、insertion delay、transition time与功耗面积等多维约束,对抗工艺电压温度(PVT)变异带来的时序不确定性。技术价值在于支撑GHz级高频芯片的setup/hold签核,广泛应用于CPU、GPU、AI加速器等复杂SoC的Innovus后端流程。本文聚焦CTS在Innovus工具链中的工程落地,覆盖

weixin_28523493的博客 223

反转链表与分组反转链表

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) {

bitcarmanlee的博客 810

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

反转链表、链表内指定区间反转

链表(Linked List)是一种线性数据结构,其中的元素(通常称为节点)按顺序排列,每个节点包含两部分信息:存储数据的部分和指向下一个节点的指针或引用。链表中的每个节点通过指针连接在一起,因此它不需要在内存中连续存储。

fakerth的博客 1485

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

链表学习反转链表

链表是一种线性数据结构,其中元素不是连续存储在内存中的,而是通过指针连接起来。每个节点包含两部分:数据域和指向下一个节点的指针域。链表分为单向链表和双向链表,本文主要讨论单向链表的反转。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 1246

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

算法 链表 反转链表

链表是一种常用的数据结构,它由一系列节点组成,每个节点包含数据部分和指向下一个节点的链接。反转链表是链表操作中的一个经典问题,不仅在面试中经常被问到,而且在实际项目中也有广泛的应用。这个问题可以通过先找到第 m 个节点,然后反转从第 m 到第 n 的节点,最后再将反转后的部分重新连接到原链表中来解决。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。递归法利用了递归的思想,每次将当前节点的后续部分反转,然后将当前节点连接到反转后的链表末尾。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 1092

反转链表及链表内指定区间反转

通过遍历,每一个节点的next指向前一个节点 首先有两个指针,指向前一个节点,previous,指向当前节点,current。 实现反转链表,使每个节点的next指向前一节点。但是current的next断开,就找不到当前节点的下一个节点了,所以需要next,用于保存当前节点的next。 next = current.next 下面进行第一次反转 断开 指向前一个节点 current.next = previous 将前一个节点的指针后移 previo...

linxuanasd的博客 2393

链表之反转链表专题

链表之反转链表专题 如题,LeetCode 206 看到反转链表,我们要思考的核心点在于如何让链表的结点指针指向的方向反转 对于反转链表,一般有迭代或者递归两种思考方向 第一种:迭代 在这种方案中,做题总结出了双指针迭代比较高效,同时有一种双指针的迭代公式 具体的动画效果可以参考LeetCode官方题解 题解动画 while(cur!=null) { //记录当前节点的下一个节点 tmp = cur.next; //然后将当前节点指向pre cur.next = pre; //pre和cur节点

子冉冰清的博客 3652

leetcode链表反转总结——全部翻转,部分反转

leetcode链表反转(递归)总结——全部翻转,部分反转 参考:步步拆解:如何递归地反转链表的一部分 由于链表反转使用迭代的思路进行实现比较简单,只是写法上比较复杂,所以这里仅整理记录一下递归反转链表的解法 一.全部反转 1.1 题目 使用递归反转链表,并返回链表 1.2 解法 /** * 递归反转链表 * @param head * @return */ public static ListNode reverseList(ListNode

weixin_44844089的博客 2485

反转链表、旋转链表算法总结

1. 反转链表(力扣:206) 2. 反转链表 II(力扣:92) 3. 旋转链表(力扣:61)

卜大爷的博客 2万+

链表反转(全链表反转、链表区间反转)

全链表反转 /** * 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; .

weixin_45744426的博客 810

单向链表的反转

<br />昨天看优快云的一个文章提到,某公司面试时问到单向链表的反转问题,有好多程序员答不出来。以前我也没做过类似的题目,试着写了一下。<br />问题描述:已知一个单向链表,写一个函数,使得该链表的方向反转,即头变尾,尾变头,指示方向相反。<br />分析:该问题可以有两种方法,一是交换首尾两个节点的数据,而不改变其内存的存储结构,二是改变所有节点的指向下一个节点的指针。显然第二种方法更加有效。<br /> <br /> /×链表的定义和一些操作*/ typedef struct list {

guoyang1007的专栏 1万+
上一篇: 写个函数,判断下面扩号是否闭合,左右对称即为闭合: ((())),)(()),(()))),(((((()),(()()),()()
下一篇: laravel跨库事务
lazy-ants
博客等级 码龄10年 1粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值