面试题16:反转链表

实战演练,如何用Easyexcel合并单元格,设置字体、边框样式,并在尾行加入备注 ,实现效果如下:1、多级表头合并2、表头底纹+表格边框3、合并相同数据单元格4、尾行加入备注。 阅读详情

题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表定义如下:

struct ListNode{
    int value;
    ListNode* next;
    ListNode(int data=int()):value(data),next(NULL)
    {}
};

此题可以用递归和头插法来做。

递归

用递归做起来稍微复杂一点,而且会有个问题,就是当链表太长时,可能会导致系统栈溢出。

大体思路就是,当我们每递归的链表的一个节点时,如果该节点不是最后一个,就先递归反转它后面的链表,然后将该节点push_back到尾部,所以我们需要一个tail指针来表明最后一个节点。否则return即可。

代码如下:

ListNode* _ReverseList(ListNode* head,ListNode*& tail)
{
    if(head==NULL)
        return NULL;
    if(head->next==NULL)
    {
        tail=head;
        return head;
    }
    ListNode* tmp=_ReverseList(head->next,tail);
    tail->next=head;
    tail=tail->next;
    return tmp;
}

ListNode* ReverseList(ListNode* head)
{
    if(head==NULL)
        return NULL;
    ListNode* tail=NULL;
    ListNode* tmp=_ReverseList(head,tail);
    tail->next=NULL;
    return tmp;
}

头插法

这种方法的思想就是,我们从链表的第二个节点开始(如果有的话),一次摘取当前节点并头插到前面已经部分反转的链表中去。需要注意的是,我们要维护三个节点指针,分别指向已经部分反转的链表头、当前节点和当前节点的下一个节点。

代码如下:

ListNode* ReverseList(ListNode* head)
{
    if(head==NULL)
        return NULL;
    ListNode* cur=head->next;
    head->next=NULL;
    ListNode* next=NULL;
    while(cur!=NULL)
    {
        next=cur->next;
        cur->next=head;
        head=cur;
        cur=next;
    }
    return head;
}

以上

如果你有任何想法或是可以改进的地方,欢迎和我交流!

完整代码及测试用例在github上:点我前往

STM32G4 电机外设篇(三) TIM1 发波 和 ADC COMP DAC级联 STM32G4电机控制外设应用笔记摘要:本文详细介绍了TIM1高级定时器生成三对互补PWM波的配置方法(预分频器PSC=30000,重装载值ARR=10000),重点说明需断开电机连线避免干扰。通过STM32CubeMX配置TIM1通道4触发ADC采样,设置RCR分频参数,并给出Keil代码修改要点。第二部分探讨了TIM1、ADC、比较器和DAC的级联应用,包括电流采样触发时序(在PWM波峰值前采样)和过流保护机制。配置步骤包含DAC3作为比较器负输入端、设置Break触发封波保护,并附关键代码段实现外设联 阅读详情

相关推荐

H5获取手机相机或相册图片两种方式-Android通过webview传递多张照片给H5

H5调用公共获取图片文件方法,在android手机端,H5主要依赖Webview,这边在webview声明并重写该方法onShowFileChooser使用工具类打开相机或相册,可以两种方式安卓原生方式或者利用第三方组件库方式选中图片,返回uri列表给H5H5收到uri照片列表,并且使用前端方式展示创造价值,乐哉分享!

m0_74823947的博客 3096

剑指offer:面试题16——反转链表

剑指offer:面试题16——反转链表 题目:输入一个链表,反转链表后,输出新链表的表头。 思路: 第一种:借助栈 第二种:为了防止链表断裂,将当前节点、当前节点的前一个和后一个节点都保存下来 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };...

MereX的博客 310

SAP Business One自定义表与字段实战:从零构建企业专属数据模型

本文详细介绍了如何在SAP Business One中创建自定义表与字段,从零构建企业专属数据模型。通过实战案例和避坑指南,帮助用户掌握业务适配、流程优化和权限隔离等关键技巧,提升系统灵活性和数据管理效率。特别适合需要扩展标准功能的SAP Business One用户。

weixin_28730927的博客 362

【剑指offer】面试题16:反转链表

题目描述: 输入一个链表,反转链表后,输出链表的所有元素。 (hint : 请务必使用链表) 输入: 输入可能包含多个测试样例,输入以EOF结束。 对于每个测试案例,输入的第一行为一个整数n(0 输入的第二行包含n个整数t(0 输出: 对应每个测试案例, 以此输出链表反转后的元素,如没有元素则输出NULL。 样例输入:

solar一抹阳光的专栏 680

【AI 编程工具进阶用法】如何在Cursor、Trae等工具中使用Skills

OpenSkills是一个开源项目,用于在Cursor、Trae等AI编程工具中添加可复用、可组合的"能力模块"。安装流程包括:1)全局安装OpenSkills CLI工具;2)选择安装Anthropic官方Skills到项目或全局;3)创建AGENTS.md文件同步Skills;4)在AI工具中调用Skills。此外还介绍了UI/UX Pro Max Skill项目,通过npm安装后可为AI添加设计能力。这些Skills相当于为AI工具安装"高级技能包"

肌肉金轮的博客 3543

SAP IDOC与EDI实战解析:从基础原理到跨系统采购订单同步

本文深入解析了SAP IDOC与EDI在企业数据交换中的核心作用,通过跨系统采购订单同步的实战案例,详细阐述了从基础原理到配置部署的全过程。文章将IDOC比作标准化数据“集装箱”,EDI视为高效传输“高速公路”,并提供了从消息类型定义、处理代码开发到全链路测试的完整指南,帮助企业实现自动化、无差错的业务协同。

weixin_28335283的博客 294

《剑指offer》面试题16:反转链表

题目 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; }; 注意 反转后链表的头结点是原始链表的尾结点 尾结点的m_pNext为NULL 应该提前想好测试用例来检查代码 需要注意以下情况 1.输入的链表头指针是NULL 2.输入的链表只...

JaneandDaria的博客 263

国产麒麟系统下Kettle安装避坑指南:解决aarch64架构不兼容问题

本文针对在国产麒麟系统上安装Kettle时遇到的aarch64架构不兼容问题,提供了详细的解决方案。通过剖析错误根源,指导用户获取并放置正确的SWT库文件,并修改启动脚本,成功解决“平台不支持”的报错,确保ETL工具在ARM架构的国产化环境中顺利运行。

weixin_29214691的博客 276

《剑指Offer》面试题16:反转链表

《剑指Offer》 P112面试题16:反转链表题目:

(●—●) 484

SAP SD实战:用BADI_SLS_HEAD_SCR_CUS给销售订单VA01/VA02加自定义字段(附完整函数组代码)

本文详细解析了在SAP SD模块中如何利用BADI_SLS_HEAD_SCR_CUS实现销售订单(VA01/VA02)的屏幕增强,包括数据结构设计、函数组创建和BADI接口实现。通过实战案例和完整代码,帮助开发者掌握在SAPMV45A标准流程中添加自定义字段的关键技术,提升业务定制化能力。

weixin_27015733的博客 369

【WorkBuddy专栏40】从「帮你干活」到「帮你创造」——WorkBuddy设计创意功能深度拆解

【WorkBuddy专栏40】从「帮你干活」到「帮你创造」——WorkBuddy设计创意功能深度拆解

AI人人懂 1296

Q-learning入门:4x4 FrozenLake实战详解与Python代码

强化学习是机器学习的重要分支,其核心在于智能体通过与环境交互试错,逐步学习最优策略。Q-learning作为最经典的时序差分算法,通过维护一张状态-动作价值表(Q表),利用贝尔曼方程迭代更新,将即时奖励与未来长期收益进行动态权衡,是理解更复杂深度强化学习算法的基石。在实际应用中,Q-learning广泛适用于路径规划、游戏博弈、机器人控制等具有明确状态和动作空间的离散决策场景。本文以经典的4x4 FrozenLake冰冻湖问题为例,从强化学习的基本概念出发,深入拆解Q-learning更新公式的每一项含义,

weixin_34221775的博客 409

【数据分享】1985-2023 年中国 30m 生长季 NDVI 数据集:刘小平团队力作,Landsat 无缝融合无云产品

中山大学刘小平团队发布1985-2023年中国30m分辨率生长季Landsat NDVI数据集,解决了传统数据的三大痛点:无缝拼接、时间连续和质量可靠。该数据集基于5-9月生长季Landsat影像,通过云检测、多景融合等技术生成,已在GEE平台开放共享。其高分辨率、长时序特性为植被动态监测、LUCC研究等提供重要支撑,在农业、生态保护等领域具有广泛应用价值。

国科大硕士在读,分享Python/GEE/Matlab/R专业代码实践,涵盖数据分析、算法开发与应用技巧等,以代码会友。 1509

剑指offer算法题之单链表的反转--面试题16:反转链表

题目如下: 本题分析 第一步: 反转结点指针 一般解决与链表相关问题总是涉及到大量的指针操作,这时候代码中很容易出错。为了正确地反转一个链表,需要调整链表中指针的方向。因此我们借助图形来直观的分析本题指针的变化过程。如下图所示,(a )图中的h, i , j 是三个相邻的结点。假设进过之前的反转操作,h结点之前的指针调整完毕,可见,前面的所有结点的m_pNext指针都指向前面一个结点。接下来要做分

优快云_564174144的博客 918

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

面试题16 :反转链表

题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。代码实现:尾插法/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { pub

Mook的博客 246

visio安装包

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

面试题16:反转链表

问题:定义一个函数,输入一个链表的表头结点,反转该链表并输出反转后的头结点。链表结点定义如下: struct Node { int data; Node* next; }; 思路:假设该链表为a->b->c->d->e,根据题意,需要将链表变为a 当我们使用2个指针的时候p1,p2。若将p1指向a,将p2指向b,需要执行b->next = a; 此时链表变为ad->e

u012724503的专栏 233

VB摄像头监控

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

面试题 16:反转链表

面试题 16:反转链表 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的 头结点。 用三个指针,pre,now,next 注意用例: 空链表; 链表只有一个结点。 package offer; /*题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的 头结点。*/ public class Problem16 { ...

weixin_33856370的博客 110
上一篇: 面试题15:链表中倒数第K个节点
下一篇: 面试题17:合并两个排序的链表
SmartBrave
博客等级 码龄12年 25粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值