Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >图解LeetCode——206. 反转链表

图解LeetCode——206. 反转链表

原创
作者头像
爪哇缪斯
修改于 2023-07-13 14:54:54
修改于 2023-07-13 14:54:54
33300
代码可运行
举报
文章被收录于专栏:爪哇缪斯爪哇缪斯
运行总次数:0
代码可运行

一、题目

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

二、示例

2.1> 示例 1:

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

2.2> 示例 2:

输入】head = [1,2] 【输出】[2,1]

2.3> 示例 3:

输入】head = [] 【输出】[]

提示:

  • 链表中节点的数目范围是 [0, 5000]
  • -5000 <= Node.val <= 5000

三、解题思路

3.1> 思路1:迭代方式

针对链表反转操作,我们首先可以选择采用迭代的方式进行转换,即,每当遍历两个节点的时候,我们都将next指针反转执行前置节点即可,此处需要注意的是,由于我们要修改next指针,所以,遍历的时候,我们要先将原本的next指针指向的对象进行缓存,然后再改变next指针。这么做的目的就是为了继续可以向后去执行遍历操作。具体操作方式请见下图所示:

3.2> 思路2:递归方式

根据题目描述,我们要将原链表执行翻转操作。那么,由于单向链表的单一方向性,我们如果想翻转链表,可以采取递归的方式进行处理,具体逻辑如下所示:

步骤1】每次递归都要将head.next节点作为方法的入参进行传递。 【步骤2】当传入的节点为null或者它的next节点为null,则直接返回该节点。 【步骤3】当遍历到最后一个节点的时候,就可以进行两个节点之间的链表反转操作了。

四、代码实现

4.1> 实现1:迭代方式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode pre = null, temp = null;
        while (head != null) {
            temp = head.next;
            head.next = pre;
            pre = head;
            head = temp;
        }
        return pre;
    }
}

4.2> 实现2:递归方式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    public ListNode reverseList(ListNode head) {
        if (head == null || head.next == null) return head;
        ListNode node = reverseList(head.next);
        head.next.next = head;
        head.next = null;
        return node;
    }
}

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
链表——206. 反转链表(这题很重要)
链表反转是⼀个出现频率特别⾼的算法题,笔者过去这些年⾯试,⾄少遇到过七⼋次。其中更夸张的是曾经两天写 了三次,上午YY,下午⾦⼭云,第⼆天快⼿。链表反转在各⼤⾼频题排名⽹站也⻓期占领前三。⽐如⽜客⽹上这个 No 1 好像已经很久了。所以链表反转是我们学习链表最重要的问题,没有之⼀。 那为什么反转这么重要呢?因为反转链表涉及结点的增加、删除等多种操作,能⾮常有效考察对指针的驾驭能⼒和 思维能⼒。 另外很多题⽬也都要⽤它来做基础, 例如指定区间反转、链表K个⼀组翻转。还有⼀些在内部的某个过程⽤到了反 转,例如两个链表⽣成相加链表。还有⼀种是链表排序的,也是需要移动元素之间的指针,难度与此差不多。接下 来我们就具体看⼀下每个题⽬。
向着百万年薪努力的小赵
2022/12/02
3290
链表——206. 反转链表(这题很重要)
【LeetCode 热题 100】206. 反转链表
很多初学者会误解输入 head = [1,2,3] 是 Python 列表。其实这是题目的简化表示方式,真正传入 reverseList 函数的是链表结构,如下:
未名编程
2025/05/11
670
Leetcode 206. 反转链表
遍历链表,以 cur 表示当前节点,以 last 表示上一个节点,将 cur 的 next 指针指向 last 即可。
zhipingChen
2019/06/11
4670
LeetCode —— 206. 反转链表
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2:
Regan Yue
2023/07/10
2140
LeetCode —— 206. 反转链表
Leetcode刷题 206. 反转链表 递归迭代两种方法实现
**链接**:https://leetcode-cn.com/problems/reverse-linked-list/
一只胡说八道的猴子
2020/10/09
5520
Leetcode刷题  206. 反转链表  递归迭代两种方法实现
常见编程模式之就地反转链表
在很多问题中,我们需要对一个链表中的节点连接进行反转,且通常需要原地进行,即不能使用额外的存储空间。这时我们可以使用就地反转链表模式,该模式本质上是一种迭代解法,流程如下图所示。首先设置一个变量 current 指向链表头部,以及另一个变量 previous 指向当前处理节点的前一个节点。下一步我们需要将当前节点 current 进行反转,将其指向前一个节点 previous,然后将 previous 指向当前节点,再将 current 移动到下一个节点,开始迭代直至遍历完成。
口仆
2020/09/22
7330
图解LeetCode——剑指 Offer 24. 反转链表
本题给出的数据结构是单向链表,那么链表中的每个节点ListNode只有2个变量,即:
爪哇缪斯
2023/05/10
1550
图解LeetCode——剑指 Offer 24. 反转链表
LeetCode-206-反转链表
利用pre指针指向null,并利用cur指针存储head节点,当cur不为空的时候
benym
2022/07/14
1970
LeetCode 每日一题206: 反转链表
按照题目的要求, 今天给出两个思路, 个人觉得迭代会比较容易思考出来, 先给出迭代的思路.
benny
2019/03/07
6320
LeetCode 每日一题206: 反转链表
图解精选 TOP 面试题 005 | 反转链表之迭代求解
链表反转在面试中非常常见,我也在面试中遇到过这道题。在本篇文章中我们先说说如何用迭代法求解该题。
江不知
2019/12/19
5710
图解精选 TOP 面试题 005 | 反转链表之迭代求解
「LeetCode」206. 反转链表
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2:
Maynor
2021/12/07
1560
「LeetCode」206. 反转链表
206. 反转链表 & 876. 链表的中间结点
翻转链表也是很经典的链表相关题目,属于必须掌握的。需要声明两个指针,分别指向前驱节点和当前节点,而翻转链表的核心就是当前节点的next指向的变化。
chuckQu
2022/08/19
3530
【数据结构和算法】反转链表
这是力扣的 206 题,难度为简单,解题方案有很多种,本文讲解我认为最奇妙的一种。
绿毛龟
2024/01/19
1530
【数据结构和算法】反转链表
LeetCode每日一题-1:反转链表
链表一般都是用迭代或是递归法来解决,而且一般都是构造双指针、三指针,比如反转链表或是DP动态规划。
墨明棋妙27
2022/09/23
2310
递归:反转链表
各位小伙伴周末愉快呀~又到了周末咯~我们本周来看看一个反转链表的系列题型吧!整体难度从简单到中等,再到困难,完美符合我们的正常刷题过程。come~
鹏-程-万-里
2020/05/18
9420
剑指offer | 面试题18:反转链表
题目描述:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
千羽
2021/12/29
5280
剑指offer | 面试题18:反转链表
206. 反转链表
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-linked-list 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
lucifer210
2019/08/19
5440
206 反转链表
反转一个链表和数组是不一样的,因为不能任意取值,只能说按照next的顺序依次往后放。那么把一个节点往后放的过程就是一次迭代
木瓜煲鸡脚
2021/01/18
4400
206 反转链表
《剑指offer》– 链表中倒数第k个节点、反转链表、合并两个排序的链表
(1)第一种:先遍历链表,算出链表节点数count,第二次直接遍历到第count-k个节点。但是要注意,可能链表节点数count小于k,此时要返回NULL,所以要先判断这个条件。(这一种就不贴代码出来了)
全栈程序员站长
2021/09/29
4360
《剑指offer》– 链表中倒数第k个节点、反转链表、合并两个排序的链表
【算法题解】 Day3 链表
给你一个字符串形式的电话号码 number。number 由数字、空格 ' '、和破折号 '-' 组成。
sidiot
2023/08/31
2000
【算法题解】 Day3 链表
相关推荐
链表——206. 反转链表(这题很重要)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验