Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Leetcode刷题 206. 反转链表 递归迭代两种方法实现

Leetcode刷题 206. 反转链表 递归迭代两种方法实现

原创
作者头像
一只胡说八道的猴子
修改于 2020-10-09 10:01:11
修改于 2020-10-09 10:01:11
5360
举报

题目链接

**链接**:https://leetcode-cn.com/problems/reverse-linked-list/

题目描述

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL

输出: 5->4->3->2->1->NULL

进阶:

你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

预置代码

代码语言:txt
AI代码解释
复制
/\*\*

 \* Definition for singly-linked list.

 \* public class ListNode {

 \*     int val;

 \*     ListNode next;

 \*     ListNode(int x) { val = x; }

 \* }

 \*/

class Solution {

    public ListNode reverseList(ListNode head) {

         

    }

}

解题思路

方法一:递归实现

**未反转前**

在这里插入图片描述
在这里插入图片描述

**反转后**

在这里插入图片描述
在这里插入图片描述

**构造一个函数reverseList(ListNode head)进行链表反转**

代码语言:txt
AI代码解释
复制
    public ListNode reverseList(ListNode head) {

        /\*如果传入的节点等于null则之间返回head说明只有一个,无需反转\*/

        if (head==null){

            return  head;

        }

        /\*如果传入节点的下一个节点为null,说明递归结束,开始进行返回节点\*/

        else if (head.next==null){

            return head;

        }

        /\*进行递归循环,newHead保存的是最后一个节点的位置\*/

        ListNode newHead = reverseList(head.next);

        /\*传入的head节点的后继节点的next指向head,实现反转\*/

        head.next.next=head;

        /\*head的next=null\*/

        head.next=null;

        return  newHead;

    }

**精解后的代码**

代码语言:txt
AI代码解释
复制
public ListNode reverseList(ListNode head) {

        if (head==null||head.next==null){

            return  head;

        }

        ListNode newHead = reverseList(head.next);

        head.next.next=head;

        head.next=null;

        return  newHead;

    }

大家如果觉得光看代码难以理解可以通过边画图边读代码的方式来进行理解,这样我感觉学起来更容易

方法二:迭代

这个理解起来应该比递归要容易的多

代码语言:txt
AI代码解释
复制
public ListNode reverseList(ListNode head) {

        /\*如果head==null或则head.next==null,

        即说明只有一个或者零个元素的时候,则不用经行反转

        ,直接返回head\*/

        if (head.next==null||head==null){

            return head;

        }

        /\*新的链表的头节点\*/

        ListNode newHead=null;

        while(head!=null){

           ListNode temp=head.next;

           head.next=newHead;

           newHead=head;

           head=temp;

        }

       return newHead;

    }

**图片演示**

在这里插入图片描述
在这里插入图片描述

**第一次移动**

在这里插入图片描述
在这里插入图片描述

**第二次**

在这里插入图片描述
在这里插入图片描述

**以此类推不再做演示**

这是博主的Leetcode刷题系列,我会每日一更或者每日多更,想一起刷题的小可爱们可以私信或者关注我我们一同学习

在这里插入图片描述
在这里插入图片描述

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LeetCode 206题 反转链表(Reverse Linked List)
题目描述: 反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
code随笔
2020/04/14
3930
LeetCode 206题 反转链表(Reverse Linked List)
LeetCode 206. 反转链表
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-linked-list 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Michael阿明
2022/11/26
2270
LeetCode 206. 反转链表
206. 反转链表
反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题? 解:迭代 public ListNode reverseList(ListNode head) { ListNode newListNode = null; while (head != null) { //保存下一个要遍历的节点 L
张伦聪zhangluncong
2022/10/26
1200
反转链表
在遍历列表时,将当前节点的 next 指针改为指向前一个元素。由于节点没有引用其上一个节点,因此必须事先存储其前一个元素。在更改引用之前,还需要另一个指针来存储下一个节点。不要忘记在最后返回新的头引用。
木子星兮
2020/07/16
6720
Leetcode 206. 反转链表
遍历链表,以 cur 表示当前节点,以 last 表示上一个节点,将 cur 的 next 指针指向 last 即可。
zhipingChen
2019/06/11
4570
206 反转链表
反转一个链表和数组是不一样的,因为不能任意取值,只能说按照next的顺序依次往后放。那么把一个节点往后放的过程就是一次迭代
木瓜煲鸡脚
2021/01/18
4260
206 反转链表
LeetCode-206-反转链表
利用pre指针指向null,并利用cur指针存储head节点,当cur不为空的时候
benym
2022/07/14
1810
两种方法求解链表高频面试题之单链表反转
单链表反转这道题可谓是链表里面的高频问题了,差不多可以说只要被问到链表,就会问单链表反转。 今天我们就一起来看下。
与你一起学算法
2021/03/23
3450
图解精选 TOP 面试题 005.1 | 反转链表之递归求解
在上一篇《图解精选 TOP 面试题 005 | 反转链表之迭代求解》中,我们介绍了该题的迭代求解法,本篇再说说如何进行递归求解。
江不知
2019/12/19
5810
图解精选 TOP 面试题 005.1 | 反转链表之递归求解
LeetCode每日一题-1:反转链表
链表一般都是用迭代或是递归法来解决,而且一般都是构造双指针、三指针,比如反转链表或是DP动态规划。
墨明棋妙27
2022/09/23
2140
LeetCode 每日一题206: 反转链表
按照题目的要求, 今天给出两个思路, 个人觉得迭代会比较容易思考出来, 先给出迭代的思路.
benny
2019/03/07
6220
LeetCode 每日一题206: 反转链表
力扣-反转链表
问题描述 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 限制: 0 <= 节点个数 <= 5000 有三种方案: 使用栈解决 双链表解决 递归解决 使用栈解决 链表反转在面试中经常被问到。使用栈解决,具体流程如下: 代码如下: public ListNode reverseList(ListNode head) { Stack<ListNode> stack =
木野归郎
2022/02/25
2170
力扣-反转链表
leetcode 递归编程技巧-链表算法题
  给定一个链表,判断链表中是否有环。   如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。   如果链表中存在环,则返回 true 。否则,返回 false 。
Wu_Candy
2022/07/04
3530
leetcode 递归编程技巧-链表算法题
每天一道leetcode206-反转链表
题目 leetcode206-反转链表 分类:链表 中文链接: https://leetcode-cn.com/problems/reverse-linked-list/ 英文链接: https://leetcode.com/problems/reverse-linked-list/ 题目详述 反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题? 题目详解 思路 反
乔戈里
2019/09/17
2880
脚撕LeetCode(206)Easy
题目地址:https://leetcode-cn.com/problems/reverse-linked-list/
JathonKatu
2022/01/18
1850
LeetCode - 反转链表
原题地址:https://leetcode-cn.com/problems/reverse-linked-list/)
晓痴
2019/09/26
4230
LeetCode - 反转链表
LeetCode 206:反转链表 Reverse Linked List
反转一个单链表。 Reverse a singly linked list. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭代
爱写bug
2019/07/22
3780
206. 反转链表
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-linked-list 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
lucifer210
2019/08/19
5330
Swift 反转链表 - LeetCode
LeetCode 题目: 反转链表 反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题? 方案一: 迭代:在链表第一个和第二个元素断开链表,保存后半段,前半段拼在新head前方,然后赋值给新head:具体如下面示意 p: a -> b -> c -> d -> e -> nil newHead = nil temp = p.next temp: b -
韦弦zhy
2018/12/19
1.2K0
Swift 反转链表 - LeetCode
图解精选 TOP 面试题 005 | 反转链表之迭代求解
链表反转在面试中非常常见,我也在面试中遇到过这道题。在本篇文章中我们先说说如何用迭代法求解该题。
江不知
2019/12/19
5520
图解精选 TOP 面试题 005 | 反转链表之迭代求解
相关推荐
LeetCode 206题 反转链表(Reverse Linked List)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档