当前位置: 首页 > web >正文

nowcoder刷题--反转链表

🎈 个人主页👉:tbRNA-CSDN博客tbRNA-CSDN博客tbRNA-CSDN博客

💯 个人简介:在校大学生一枚💋.
😍 希望我的文章对大家有着不一样的帮助,欢迎大家关注我,感谢大家的多多支持!

🎉 欢迎  👍点赞  ✍评论  ⭐收藏

目录

🦛题目描述

方法一:双链表求解

方法二:递归求解

😪总结

🐐题目链接


🦛题目描述

给定一个单链表的头结点pHead ,长度为n,反转该链表后,返回新链表的表头。

数据范围: 0 ≤ n ≤ 1000

要求:空间复杂度 O(1),时间复杂度 O(n) 。

如当输入链表 { 1 , 2 , 3 } 时,

经反转后,原链表变为 { 3 , 2 , 1 } ,所以对应的输出为 { 3 , 2 , 1 } 。

以上转换过程如下图所示:

方法一:双链表求解

解题思路:

1️⃣ 首先先把原链表head的下一个节点保存到tmp中。

2️⃣ 摘掉的链表的head节点指向newnode让它成为新的链表的头结点。

3️⃣ newnode = head,head = tmp(注意步骤顺序)

4️⃣ 当原链表遍历完直到head为空时,最后返回新链表的头节点。

class Solution {
public:ListNode* ReverseList(ListNode* head) {ListNode* newHead = nullptr;while(head != nullptr){ListNode* tmp = head->next;head->next = newHead;newHead = head;head = tmp;}return newHead;}
};

方法二:递归求解

首先,我们先对递归函数的定义进行复习

1️⃣ 在C/C++中,递归就是函数⾃⼰调⽤⾃⼰

2️⃣ 递归函数具有以下两个关键特性:

🐘基本情况:这是递归停止的条件。

当问题规模足够小,可以直接解决而不需要进一步分解时,就达到了基本情况。

在C/C++中,基本情况通常是一个简单的返回语句,它不会导致函数再次调用自身。

🐫递归步骤:在这一步中,函数会调用自身,但每次调用时问题的规模都会减小。

递归步骤会包含一个或多个导致函数再次调用自身的条件。

解题思路:

1️⃣ if 判断 是递归停止的条件,当节点为空或节点的下一个节点为空,则返回该节点。

2️⃣ 定义变量ans记录返回的节点。

3️⃣令节点的下一个节点的下一个指向该节点,如果没有这一步代码,ans不能连接剩余返回的节点,只会一直保持 尾节点->NULL (这一步可以打断点调试一下)。

4️⃣设置head节点的下一个节点为空,返回该节点。

class Solution {
public:ListNode* ReverseList(ListNode* head) {if(head == NULL || head->next == NULL){return head;}ListNode* ans = ReverseList(head->next);head->next->next = head;head->next = NULL;return ans;}
};

😪总结

这两个解题方法相对来说效率比较高,可以拿来练练手😋,复习一下链表知识。

🐐题目链接

反转链表_牛客题霸_牛客网

💯如果这篇文章对你有用的话,请继续关注! 

欢迎大家评论区留言交流,你的关注是我最大的动力 !

http://www.xdnf.cn/news/18860.html

相关文章:

  • MCP 协议原理与系统架构详解—从 Server 配置到 Client 应用
  • SSM从入门到实战:3.1 SpringMVC框架概述与工作原理
  • AI 应用开发:从 Prompt 工程到实战应用开发
  • 基于Flask和AI的智能简历分析系统开发全流程
  • golang 基础类 八股文400题
  • 数据赋能(406)——大数据——数据系统安全性原则
  • k8s笔记04-常用部署命令
  • Matlab高光谱遥感、数据处理与混合像元分解实践技术应用
  • 从Java全栈到前端框架的深度探索
  • Android进入Activity时闪黑生命周期销毁并重建
  • 波音787项目:AR技术重塑航空制造的数字化转型
  • 如何用DeepSeek让Excel数据处理自动化:告别重复劳动的智能助手
  • EXCEL自动调整列宽适应A4 A3 A2
  • 云手机挂机掉线是由哪些因素造成的?
  • SQL语法指南
  • Maven下载历史版本
  • AI测试工具midsence和browse_use的使用场景和差异
  • 行向量和列向量在神经网络应用中的选择
  • CPTS-Pressed复现(XML-RPC)
  • 【沉浸式解决问题】NVIDIA 显示设置不可用。 您当前未使用连接到NVIDIA GPU 的显示器。
  • 智能电视MaxHub恢复系统
  • 了解一下大模型微调
  • 基于SpringBoot的物资管理系统【2026最新】
  • pikachu之Over permission
  • 从零到一:现代化充电桩App的React前端参考
  • 自动修改excel 自动统计文件名称插入 excel辅助工具
  • 【基础-单选】向服务器提交表单数据,以下哪种请求方式比较合适
  • 处理端口和 IP 地址
  • 基于Java企业商城网站
  • 彻底解决PyCharm中Matplotlib无法显示图形及中文乱码问题