leetcode 反转链表

力扣【LeetCode】—— 旋转数组、链表反转【java】 文章目录旋转数组链表反转 旋转数组 题目链接:https://leetcode-cn.com/problems/rotate-array/ 题目: 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 示例: [1,2,3,4,5,6,7] 和 k = 3 结果: [5,6,7,1,2,3,4] 说明: 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。    要求使用空间复杂度为 O(1) 的 原地 算法。 解法一: 暴力解决 该解决方案虽然满足题意中的空间复杂度条件 阅读详情

key:

1. 定义三个指针,cur;newhead;cur的前一个结点 pre

2.判断最后一个结点,直接赋值给newhead

*** 如果是双向链表,就是多了一步往前的指针处理

**** 如果是将二叉搜索树转换成有序的双向链表,也是一样的:中序遍历 + 根节点处的指针转换;

同时要注意对于参数pre,要用*&

解释:指针是一个存放地址的变量,而指针引用指的是这个变量的引用,众所周知C++中如果参数不是引用的话会调用参数对象的拷贝构造函数,所以如果有需求想改变指针所指的对象(换句话说,就是要改变指针里面存的地址),就要使用指针引用,

参考链接:https://www.cnblogs.com/jiasq/p/8637982.html

class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
         if(pHead == NULL) return NULL;
         ListNode* cur = pHead;
        ListNode* newhead = NULL;
        ListNode* pre = NULL;
        while(cur){
            ListNode* temp = cur->next;
            if(temp == NULL) newhead = cur;
            cur->next = pre;
            pre = cur;
            cur = temp;
        }
        return newhead;
    }
};
 DoubleNode* reverseList(DoubleNode *head)
  { //双向链表
     DoubleNode *pre = NULL;
     DoubleNode *next = NULL;
  
      while(NULL != head)
      {
          next = head->next;
          head->next = pre;
          head->pre = next;    //多了一步前置处理
          pre = head;
          head = next;
      }
      return pre;
  }
//二叉搜索树 转换为有序的双向链表
 TreeNode* Convert(TreeNode* pRootOfTree)
    {
        if(pRootOfTree == nullptr) return nullptr;
        TreeNode* pre = nullptr;
        dfs(pRootOfTree,pre);
        TreeNode* res = pRootOfTree;
        while(res->left) res = res->left;
        return res;
        
    }
    void dfs(TreeNode* cur,TreeNode*& pre){
 //必须要加取地址的操作,因为pre是动态变化的,如果不加的话,调用结束后很可能pre没有变化,一直为空


        if(cur == nullptr) return;
        dfs(cur->left, pre);
        cur->left = pre;
        if(pre) pre->right = cur;
        pre = cur;
        dfs(cur->right, pre);        
    }

 

【中等】力扣算法题解析LeetCode92:反转链表 II 题目要求反转链表中从位置 left 到 right 的节点。通过创建虚拟头节点简化边界处理,定位反转区间的前驱节点后,迭代反转局部链表,最后重新连接。核心步骤包括:虚拟头节点初始化、前驱节点定位、区间反转(通过 prev 和 curr 指针)以及链表重连。Java 实现仅需一次遍历,时间复杂度 O(n),空间复杂度 O(1)。示例验证了算法的正确性,适用于边界条件(如 left=right 或头节点反转)。进阶要求的一趟扫描已满足。 阅读详情

相关推荐

实现双向链表反转

基于linkedList实现自己的双向链表反转。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

206. 反转链表—三种方法(Leetcode)

206. 反转链表—三种方法(Leetcode)给你单链表的头节点head,请你反转链表,并返回反转后的链表。

weixin_64618739的博客 3131

JAVA双向链表反转实现

通过java实现的双向链表,及反转功能,可能对面试有用哦

链表的反转-leetcode

leetcode 链表反转

weixin_44681349的博客 864

Python经常遇到导入xlwings就出错,如何解决

Python经常在导入xlwings时遇到错误。有人建议尝试重装或升级xlwings,但这些操作后仍然无法解决导入错误问题。

felix_8的博客 1740

VGG16

VGG16学习笔记

一去不复返的通信er 1178

leetcode 206. 反转链表

leetcode 206. 反转链表

fucheng的博客 849

数学建模 种群竞争模型 学习笔记

模型背景 应用场景 种群竞争模型 例如 s1=0.5,则表示对于供养甲的资源来讲,单位数量的乙的消耗为单位数量的甲的0.5倍,即表示乙对于该资源的占有能力是甲的0.5倍(即竞争力弱) 仿真结果及分析 (1)设置自然增长率 r1=r2=1 (2)改变自然增长率 r1=r2=0.3 (3)修改甲和乙的最大容量 n1=10000, n2=100 (4)修改甲和乙的初始数量 x1=10, x...

Test_tju的博客 2029

链表题解——反转链表【LeetCode】

递归参数cur(当前处理节点)、pre(前驱节点)终止条件时返回pre递归关系:处理当前节点 + 递归处理剩余节点空间开销:每次递归调用都会占用栈空间返回值传递:每层递归都返回最终的新头节点优点:代码简洁,体现递归思维缺点:空间复杂度较高,深度链表可能栈溢出。

chao_789的博客 936

实战避坑:在STM32上移植AUTOSAR BSW时,MCAL、ECU抽象层和服务层配置有哪些常见‘雷区’?

本文深入解析在STM32上移植AUTOSAR BSW时MCAL、ECU抽象层和服务层配置的常见陷阱,包括时钟树配置差异、GPIO电气特性问题、定时器资源冲突等实战经验。特别针对AUTOSAR架构在资源受限MCU上的特殊挑战,提供具体解决方案和优化策略,帮助开发者规避移植过程中的典型错误。

weixin_30258901的博客 561

10X Genomics数据实战:手把手教你用Seurat处理单细胞PBMC数据(附完整代码)

本文详细介绍了如何使用Seurat处理10X Genomics的单细胞PBMC数据,从数据获取、质控到降维分析和细胞分群的全流程。通过实战代码演示,帮助研究者掌握单细胞RNA测序数据分析的核心技术,提升对细胞异质性的理解。

weixin_29053577的博客 254

L2.【LeetCode题解】反转链表(逆置链表)

给你单链表的头节点head,请你反转链表,并返回反转后的链表。本解法的执行用时分布击败100.00%

zhangcoder的博客 记录学习轨迹~ 1191

实验三 Gmapping建图

自主移动机器人第三次实验课,内容包括:(1)turtlebot的gmapping建图;(2)rosbag的使用;(3)gazebo中的gmapping建图。

lj164567487的博客 4649

【反转链表系列】力扣206,92,25

本文涉及的力扣题目,涉及简单、中等、困难三个难度力扣206.反转链表力扣92.反转链表 II力扣25.K 个一组翻转链表反转链表这类型的题目,折磨了挺久,经常弄懂了一道题,但是遇到下一道反转链表的题目还是不会。所以我整理了三道比较经典的反转链表的题目,从浅到深一步一步领悟反转链表的处理思路。

沉迷写代码的程序猿的博客 1148

【传感器模块项目实战】自动驾驶/机器人相关传感器原理及标定

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、IMU二、相机三、激光雷达四、轮速里程计五、GPS/RTK六、毫米波雷达总结 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对**【自动驾驶相关传感器原理及标定】**做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、IMU IMU惯导系统的特性(imu_calc函数功能) IMU运行的

qq_35635374的博客 1232

数据库课程案例——电力公司收费管理系统分析与实践,完整带SQL语句

某电力公司收费管理信息系统实现客户信息、用电类型(类别号、类别名、电价)及业务员管理;实现客户用电信息管理(客户号、月份、用电类别号、用电度数);实现客户费用管理(客户号、月份、费用、收费标志),收费标志的默认值为“未收”;实现收费登记(客户、月份、应收费用、实收费用、业务员),并自动修改收费标志(用触发器实现);创建触发器,实现收费时自动更加应收费用和实收费用,计算本次结余,然后修改客户信息表中的结余金额;创建存储过程统计指定月份应收费用和实收费用;创建存储过程查询指定月份未交费的用户信息,以便崔费;创建

qq_44242804的博客 2765

力扣LeetCode第206题反转链表

力扣LeetCode第206题反转链表

weixin_44061444的博客 232

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

题解 力扣 LeetCode 206 反转链表 C/C++ 三种思路

可以用迭代和递归来做,每种又可以具体写成不同样子,这里给出三种不同思路的代码 先说迭代: 遍历整个链表 第一个节点是将来的最后一个节点,令它指向 NULL 之后的每个节点指向之前的节点即可,每次反转前都要记录一下下一个节点 否则会和之后的节点断开联系 former 用来记录之前的节点 latter 用来在该次反转前记录下一个节点 p 不为 NULL 就继续执行,结束执行后返回 p 循环体上半部分结束后判断 latter,因为我们要返回 p 作为最后一个节点的地址 所以不能让 p == NULL

qwq_ovo_pwp的博客 2347

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

206. 反转链表 - 力扣(LeetCode)

调用 reverseList(head.next),即对节点 2 -> 3 -> 4 -> 5 进行反转。同样的操作依次在节点 3、2、1 上进行,最终整个链表反转为 5 -> 4 -> 3 -> 2 -> 1。递归一直进行到 head 指向节点 5 时,head.next 为空,返回 head(节点 5)。执行 head.next.next = head,即节点 5 的 next 指向节点 4。当递归返回到节点 4 时,head 指向节点 4,head.next 指向节点 5。

q1111111da的博客 508

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

剑指 Offer 24. 反转链表 - 力扣(LeetCode)

剑指 Offer 24. 反转链表 - 力扣(LeetCode)

Onwaier的博客 534

【java】 力扣 K个一组反转链表

给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

qq_55846232的博客 1577

leetcode力扣206题反转链表及小注意点

力扣题里面的头结点是第一个结点,并不是通常意义上的首个无数值意义的结点。

xiaohao0001abc的博客 245

算法学习——LeetCode力扣链表篇1(203. 移除链表元素、707. 设计链表、206. 反转链表)

算法学习——LeetCode力扣链表篇1(203. 移除链表元素、707. 设计链表、206. 反转链表)

拉依达不拉跨的博客 1858

92. 反转链表 II - 力扣(LeetCode)

cur.next 指向 pre.next(节点 1 的 next 是节点 2,所以 cur.next 指向节点 2,形成循环)。cur.next 指向 pre.next(节点 2),将节点 3 插入到节点 2 后面。cur.next 指向 pre.next(节点 3),将节点 4 插入到节点 3 后面。此时节点 2 tail.next 指向 nxt(节点 4),保持剩余链表的连接。pre.next 断开与节点 2 的连接,更新为 cur(节点 3)。链表结构为 1->4->3->2->5->NULL。

q1111111da的博客 982

力扣刷题笔记——反转链表

经典问题反转链表这里给出四种解法。

bairui6666的博客 1645

指定区间的链表反转问题|力扣leetcode92反转链表2(cpp、Java实现)

反转指定区间链表可以使用以下四种方法:头插法是一种利用辅助节点将每个节点插入到链表头部的方法。具体来说,我们先创建一个辅助节点,然后依次遍历链表中的每个节点,将其插入到辅助节点的后面,随后将辅助节点指向该节点。最后,我们将辅助节点后面的节点全部取出来,即为反转后的链表。该方法的时间复杂度为O(n),空间复杂度为O(1)。这种方法思路简单,代码实现也直接。以链表的指针作为遍历的方式,依次反转指定区间内的节点。每遍历到一个节点就将其反转,直到遍历完指定区间内的所有节点。

染落林间色的博客 3018
上一篇: leetcode 重建二叉树
下一篇: 深度学习 反向传播的过程
kotomi_du
博客等级 码龄10年 5粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值