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

代码随想录二刷 | 链表 | 翻转链表

代码随想录二刷 | 链表 | 翻转链表

  • 题目描述
  • 解题思路 & 代码实现
    • 双指针法
    • 递归法

206.翻转链表

题目描述

给你单链表的头节点 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

进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?

解题思路 & 代码实现

双指针法

只需要改变链表的 next 指针的指向,直接将链表翻转,而不用重新定义一个链表。
在这里插入图片描述
首先定义一个 cur 指针指向头节点,在定义一个 pre 指针初始化为 null

随后将cur->next节点用 tmp指针保存一下,随后将cur -> next指向 pre ,这样就完成了第一个节点的翻转。

接下来进入循环继续移动 pre 和 cur 指针,最后 cur指针指向 null ,循环结束,链表翻转完成,return pre指针, pre指针就指向了头节点。

class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode* tmp;ListNode* cur = head;ListNode* pre = NULL;while (cur) {tmp = cur -> next;cur -> next = pre;pre = cur;cur = tmp;}return pre;}
};

时间复杂度:O(n)
空间复杂度:O(1)

递归法

class Solution {
public:ListNode* reverse(ListNode* pre, ListNode* cur) {if (cur == NULL) return pre;ListNode* tmp = cur -> next;cur -> next = pre;// 递归写法实际上也是做了这两步// pre = cur;// cur = tmp;return reverse(cur, tmp);}ListNode* reverseList(LKistNode* head) {return reverse(NULL, head);}
};
http://www.lryc.cn/news/237938.html

相关文章:

  • 每日一题(LeetCode)----链表--两两交换链表中的节点
  • 竞赛选题 身份证识别系统 - 图像识别 深度学习
  • 什么时候用@MapperScan 注解?
  • MQTT.js
  • html滑动文章标题置顶
  • Android11 桌面默认横屏导致任务键近期任务布局UI显示错误!
  • 「Verilog学习笔记」根据状态转移图实现时序电路
  • 使用DHorse发布SpringBoot项目到K8S
  • Java修仙记之记录一次与前端女修士论道的经历
  • 初识linux(1)
  • 投资黄金:如何选择正确的黄金品种增加收益?
  • Rust错误处理机制:优雅地管理错误
  • docker-compose安装harbor
  • 【python学习】基础篇-常用模块-shutil文件和目录操作
  • 鸿蒙系统调研适配
  • SAP gui 登录条目不让修改
  • 华为ac+fit无线2层漫游配置案例
  • nginx的location中配置路径讲解
  • No appropriate protocol -- Mysql
  • Using Set Processing Effectively 有效地使用集合处理
  • HarmonyOS开发Java与ArkTS如何抉择
  • “茶叶创新:爆改营销策略,三个月狂销2300万“
  • 分享一个生成哈希值的C代码
  • 【Windows 常用工具系列 11 -- 福昕PDF搜索高亮过的文本】
  • (二)汇编语句组成
  • Linux C 网络编程概述
  • 腾讯云标准型s5和s6有什么区别?CPU处理器有差异吗?
  • WPF TextBox实现placeholder
  • UiPath Studio 2023.10 Crack
  • SpringBoot——入门及原理