链表中的递归算法C语言带你看看

news2024/10/6 4:11:39

25. K 个一组翻转链表

难度困难1998收藏分享切换为英文接收动态反馈

给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。

k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

示例 1:

输入:head = [1,2,3,4,5], k = 2
输出:[2,1,4,3,5]

示例 2:

输入:head = [1,2,3,4,5], k = 3
输出:[3,2,1,4,5]

提示:

  • 链表中的节点数目为 n
  • 1 <= k <= n <= 5000
  • 0 <= Node.val <= 1000

进阶:你可以设计一个只用 O(1) 额外内存空间的算法解决此问题吗?

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* reverseKGroup(struct ListNode* head, int k)
{
    //创建是那个指针 s记录反转之后的头节点 e记录反转之后的尾节点 c要反转的下一个节点
    struct ListNode* ptrStart;
    struct ListNode* ptrEnd;
    struct ListNode* ptrCurr;
    if(head == NULL)
    {
        return head;
    }
    //如果头节点不为空 但所有节点之和不等于k也就不反转 直接返回head
    ptrCurr = head;
    for(int i = 0;i<k;i++)
    {
        if(ptrCurr != NULL)
        {
            ptrCurr = ptrCurr->next;
        }
        else{
            return head;//遇到空就返回头节点
        }
    }
    //将k个元素反转 首先要明白 两个元素进行翻转需要进行1此 以此类推 k个元素 需要k-1次
    ptrStart = head;
    ptrEnd = ptrStart;
    ptrCurr = ptrStart->next;
    for(int i = 1;i<k;i++)
    {
        if(ptrCurr)
        {
            ptrEnd->next = ptrCurr->next;
            ptrCurr->next = ptrStart;
            ptrStart = ptrCurr;
            ptrCurr = ptrEnd->next;
        }
    }
    ptrEnd->next = reverseKGroup(ptrCurr,k);//递归 看起来还是挺简洁的
    return ptrStart;
}

思路理解

 

对于这个递归 他向下归的时候 就对k个节点进行了翻转  达到递归条件返回时 只返回了头节点 也就是S 或者head 将返回的节点连接到E->next 就达到了k个节点的翻转

206. 反转链表

难度简单3107收藏分享切换为英文接收动态反馈

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:

输入:head = [1,2]
输出:[2,1]

示例 3:

输入:head = []
输出:[]

提示:

  • 链表中节点的数目范围是 [0, 5000]
  • -5000 <= Node.val <= 5000
struct ListNode* reverseList(struct ListNode* head) {
    if (head == NULL || head->next == NULL) {
        return head;
    }
    struct ListNode* newHead = reverseList(head->next);
    head->next->next = head;
    head->next = NULL;
    return newHead;
}

这个递归就是先归到链表末尾 将最后一个节点作为头节点 newhead (记录翻转后的头节点)上一层函数调用中的head 是指向倒数第二个节点的 所以head->next->next 就是最后一个节点中存放下一个节点的指针 让倒数第一个节点指向倒数第二个节点 再将倒数第二个节点指向空 达到了一次翻转 

递归调用个人感觉就像是用调用自身的那部分将整个函数划分两部分 

第一部分 :就是向下递归时要做什么

第二部分 :就是向上递归时要做什么

再来个递归条件 什么时候停止 我感觉还是 考虑好第一部分 和 第二部分 在这个过程中你肯定会考虑到递归条件是什么

确实不太好想 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/452025.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis实现分布式锁的正确姿势 | Spring Cloud 36

一、分布式锁 1.1 什么是分布式锁 分布式锁&#xff0c;即分布式系统中的锁。在单体应用中我们通过锁解决的是控制共享资源访问的问题&#xff0c;而分布式锁&#xff0c;就是解决了分布式系统中控制共享资源访问的问题。与单体应用不同的是&#xff0c;分布式系统中竞争共享…

【网络安全】SSRF漏洞

ssfr ssrf产生的原因原理展示使用不当可能出现ssrf漏洞函数漏洞检测(靶场一)代码curl是什么检测服务器是否可以从其他服务器获取数据使用file协议获取远端服务器的内容利用dict协议探测端口 漏洞检测&#xff08;靶场二&#xff09;代码file_get_contents()利用file协议读取服务…

过来人(江苏)专转本考试后的感悟和经验,真的很受用

过来人转本考试后的感悟和经验&#xff0c;真的很受用&#xff01; 转本不仅是分数的较量&#xff0c;也是信息收集、时间管理、学习能力、毅力等等的较量。 同学们在转本中难免会遇见一些困难&#xff0c;为了避免走弯路&#xff0c;一起来看看过来人的感悟和经验吧&#xf…

Android音频使用webrtc降噪处理、回声消除

Android音频使用webrtc降噪处理、回声消除 介绍音频处理在Android应用中的重要性和应用场景 音频处理在Android应用中扮演着重要的角色&#xff0c;它能够改善用户体验&#xff0c;提升应用的功能性和吸引力。下面将介绍音频处理在Android应用中的广泛应用以及音频处理对用户体…

深度学习--基础(一)pytorch安装--cpu

在线安装 无GPU的时候&#xff0c;只能安装CPU版本&#xff0c;打开官网 https://pytorch.org/ 直接Pip安装即可 国内访问这些下载安装会出现超时的情况&#xff0c;可以-i指定国内安装源&#xff1a; pip3.11 install torch torchvision torchaudio -i https://pypi.tuna.ts…

【架构】微前端

文章目录 概述优劣优点缺点 微前端的整体架构微前端部署平台微前端运行时基于 SPA 的微前端架构 应用生命周期 方案qiankun 主应用qiankun微应用Vue 2 微应用 来源 概述 微前端不是单纯的前端框架或者工具&#xff0c;而是一套架构体系&#xff0c;这个概念最早在 2016 年底被…

[C++]内存管理

目录 内存管理&#xff1a;&#xff1a; 1.C/C内存分布 2.C语言中动态内存管理方式 3.C中动态内存管理 4.operator new与operator delete函数 5.new和delete的实现原理 6.定位new表达式 7.内存泄漏 内存管理&#xff1a;&#xff1a; 1.C/C内存分布 int globalVar 1; stati…

第11届蓝桥杯省赛真题剖析-2020年6月21日Scratch编程初中级组

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第125讲。 第11届蓝桥杯省赛&#xff0c;这是2020年6月21日举办的省赛Scratch考试真题&#xff0c;原定于2020年3月7日…

速度和可靠性是可以两全其美的

通过采用整体方法并利用工程原理和实践&#xff0c;我们可以两全其美——速度和可靠性。 当涉及到在线服务时&#xff0c;正常运行时间是至关重要的&#xff0c;但这并不是唯一需要考虑的事情。想象一下&#xff0c;经营一家网上商店——让你的网站99.9%的时间都可用听起来不错…

10个很少人知道的 JavaScript 控制台方法

您肯定听说过 console.log() 并且可能一直在使用它。它非常流行&#xff0c;像 Visual Studio Intellicode 这样的工具通常会在 IDE 中输入时在任何其他控制台方法之前推荐它&#xff1a; 在今天这篇文章中&#xff0c;我们将探讨一些最有用的控制台方法及其在数据可视化、调试…

服装产业数字化升级,低代码赋能企业柔性生产

一、前言 随着消费者个性化需求不断增加&#xff0c;我国服装行业正面临着前所未有的挑战。此外&#xff0c;电商渠道占比不断提高&#xff0c;订单碎片化程度进一步放大&#xff0c;传统计划性生产的供应链流程已无法适应不断变化的着衣需求&#xff0c;使得服装品牌商在供应…

6.MapReduce的框架原理

本章节将分为InputFormat,split,OutputFormat三个小章节来介绍框架原理 1.InputFormat 1.1 切片: 将输入数据分成几份,每份交给一个MapTask去处理(getSplit方法) 对于MapRedcue,切片发生在客户端,任务提交的时候 机制:MapTask并行度决定机制 切了多少片,就开启多少个M…

记录一次heap.bin文件分析

背景&#xff1a;生产服务运行OA系统服务&#xff0c;用户使用过程中&#xff0c;突然发现服务不能访问&#xff0c;接到用户反馈后&#xff0c;第一时间登陆服务器&#xff0c;发现东方通进程在、端口在&#xff0c;服务器CPU使用率并不高&#xff0c;为不影响用户正常开展业务…

记录bingAI解答pyjwt参数和头部的问题

python jwt.encode()函数的参数是哪些 正在搜索: python jwt.encode()函数的参数 正在为你生成答案… 已收到消息. 在Python中&#xff0c;jwt.encode()函数的参数有三个&#xff1a;第一个是payload&#xff0c;主要用来存放有效的信息&#xff0c;例如用户名&#xff0c;过期…

去后厂村开游戏厅吧!基于PP-TinyPose的简易体感游戏开发框架

‍ 项目简介 近年来&#xff0c;随着虚拟现实技术和计算机图形学技术的迅猛发展&#xff0c;越来越多的体感游戏在市场上出现并受到欢迎。要让体感游戏具备良好的表现&#xff0c;就需要使用大量的传感器&#xff0c;甚至需要使用高性能的计算机和图形处理器。这不仅会增加游戏…

单链表leetcode——C语言

203. 移除链表元素 难度简单1230收藏分享切换为英文接收动态反馈 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6…

java_java基础语法

注释 什么是注释 简单来说注释就是在程序中对代码进行解释说明的文字,方便自己和其他人理解,查看,不会影响程序的正常执行注释有哪些 单行注释// 注释内容只能写一行多行注释/* 注释内容1 注释内容2 */文档注释/** 注释内容 注释内容 */字面量 告诉程序员,数据在程序中的书写…

C++中常用的四种类型转换方式

C中常用的四种类型转换方式 一、相关概念二、static_cast 转换2.1、说明2.2、返回值2.3、示例 三、const_cast 转换3.1、说明3.2、返回值3.3、示例 四、dynamic_cast 转换4.1、说明4.2、返回值4.3、示例 五、reinterpret_cast 转换5.1、说明5.2、返回值5.3、示例 总结 一、相关…

【大数据之Hadoop】十八、MapReduce之压缩

1 概述 优点&#xff1a;减少磁盘IO、减少磁盘存储空间。 缺点&#xff1a;因为压缩解压缩都需要cpu处理&#xff0c;所以增加CPU开销。 原则&#xff1a;运算密集型的Job&#xff0c;少用压缩&#xff1b;IO密集型的Job&#xff0c;多用压缩。 2 压缩算法对比 压缩方式选择时…

深入浅出DPDK-1.1主流包处理硬件平台

DPDK用软件的方式在通用多核处理器上演绎着数据包处理的新篇章&#xff0c;而对于数据包处理&#xff0c;多核处理器显然不是唯一的平台。支撑包处理的主流硬件平台大致可分为三个方向&#xff1a;硬件加速器、网络处理器、多核处理器。 根据处理内容、复杂度、成本、量产规模…