今天刷LeetCode刷到一道经典的链表题——反转链表(据说很多大厂面试考了这个)

题意如下,一句话概括就是把1->2->3->4->5   反转变成5->4->3->2->1:

这是题目给的代码,我们需要填空reverseList方法,代码在这里面写:

方法一:递归求解(明天再更其他的方法)

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }* 这里注释掉的地方表示题目的提示,题目已经给出了定义的结点类,我们直接用就好*/class Solution {public static ListNode reverseList(ListNode head) {if (head == null || head.next == null) {return head;}ListNode result = reverseList(head.next);head.next.next=head;head.next=null;return result;}
}

逐行来看:   我们以把 “ 1  2  3  4  5”  变成 “5  4  3  2  1 ”  为例

第一行, if (head == null || head.next == null)

当head为null时直接返回head;当head.next为空时,即遍历到“5”这个数,此时5的后面显然为空,head.next=null表示的就是遍历到了最后一个

第二行,我们定义了一个result,result=reverseList(head.next)是什么意思呢?

我们把例子代入,首先head是1,不满足if判断,直接到result = reverseList(head.next);

head.next是2,把2代入进reverseList进行判断,逐行运行,显然2不为空,第一行if判断不成立,走到这行代码(ListNode result = reverseList(head.next);)head.next=3,

把3代到reverseList进行判断,同样if判断不成立,此时head.next=4,

把4代到reverseList进行判断,又跑一遍函数if, 不成立,再代入

5            if成立(因为5的后一个为空  head.next=null),终于可以返回head,此时result = reverseList(head.next),result被赋值为5,result = reverseList(head.next)这一行代码终于执行完毕!我们终于可以执行下面的代码啦!

( 一遇到(ListNode result = reverseList(head.next);)就会先执行等号右边的内容,只有知道右边是什么才可以把它赋值给左边。但是问题在于等号右边并不能马上执行完,我们必须执行到最后一个数 有了return的结果才可以把它返回到reverseList,这时候右边才有具体的值。)

接下来的代码是:

head.next.next=head;

head.next=null;

由前面已知,此时head=4,

我们需要做的是把5指向4 ( head.next.next=head)

再把4指向5的指针消掉    (head.next=null)

最后返回result

测试结果如下:

如果还不清楚的话可以看看这个up的视频(因为我也是看她的才看明白的hhh,讲得很清楚)非常非常感谢up主!!

反转链表——Java递归求解相关推荐

  1. 《LeetCode力扣练习》第206题 反转链表 Java

    <LeetCode力扣练习>第206题 反转链表 Java 一.资源 题目: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 示例 1: 输入:head = [1,2, ...

  2. 《LeetCode力扣练习》剑指 Offer 24. 反转链表 Java

    <LeetCode力扣练习>剑指 Offer 24. 反转链表 Java 一.资源 题目: 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1-& ...

  3. 反转链表JAVA算法_链表反转算法

    1 packagecom.trs.codetool.sort;2 3 /** 4 *@authorzheng.changgang5 * @date 2020-01-02 09:576 * 链表的常见算 ...

  4. 反转链表 python 递归_LeetCode 206.反转链表(Python3)

    题目: 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你 ...

  5. 剑指 Offer 24. 反转链表java

    定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3-&g ...

  6. LeetCode 热题 HOT 100 -------160. 相交链表(链表)206. 反转链表(递归、回溯)

    dsadas /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* L ...

  7. 链表之反转链表,万金油的解题方法(java求解)

    链表之反转链表,一招鲜吃遍天(java求解) 内容目录 链表之反转链表,一招鲜吃遍天(java求解) 解题万金油 栗子1:反转整个链表 栗子2:反转某个区间内的链表 栗子3:按照k为一组,反转某个区间 ...

  8. [Leedcode][JAVA][第25题][K个一组反转链表][链表][递归]

    [问题描述][第25题][K个一组反转链表][困难] 时间复杂度:O(N^2) 空间复杂度:O(1) ```java 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表.k 是一个正整数, ...

  9. [剑指offer][JAVA]面试题第[24]题[反转链表][递归][双指针][头插法]

    [问题描述][中等] 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点.示例:输入: 1->2->3->4->5->NULL 输出: 5->4 ...

  10. java 链表反转_面试必备 | 不可不会的反转链表

    反转链表这题真的是面试非常喜欢考的了,这题看起来简单,但是能用两种方法一遍 bug free 也是不容易的,面试的时候可以筛下来一大批人,无论是对 junior 还是 senior 面试都很爱考.今天 ...

最新文章

  1. java 中调用window系统中的文件,或者执行命令(shell、.CMD、.EXE)并获取返回值
  2. 服务器日志清理及IIS日志的清理
  3. java mina unix client
  4. [导入]MSIL: call callvirt
  5. 培养创造性思维的20个技巧
  6. Angular2 初识
  7. 对象创建型 - 单利模式
  8. 对棋盘完美覆盖问题证明过程的质疑及其解决
  9. SIAM International Conference on Data Mining, SDM 会议怎么样?
  10. python: 使用正则表达式的时候,传递参数的方法:
  11. 创维酷开电视能换成android系统吗,创维酷开电视怎么系统升级【图文教程】
  12. sql2000海量存储过程(1500w数据,分页只需1秒)
  13. 传智播客杨中科老师的全13季 C#、Asp.net视频教程
  14. 用PHP实现手机对jar,jad文件的下载(转)
  15. Linux软件安装方法之rpm包安装
  16. 德保罗大学计算机排名,德保罗大学费用
  17. 注意:这些跳槽理由会被HR调查!
  18. 跟我学药物设计 | 药物研发的过程和药物设计的意义
  19. 巴东县黄土坡滑坡GNSS自动化位移监测解决方案
  20. WinEdt, eso-pic.sty not found

热门文章

  1. [1034]安装Xposed框架+JustTrustMe
  2. burp抓取APP数据包+安装Xposed+Just TrustMe
  3. 康佳电视系统升级服务器地址,康佳电视各平台升级方法及强制刷机汇总
  4. 普通人适合哪种O2O创业模式 O2O模式的应用价值是什么?
  5. 计算机网络编程基础知识总结思维导图
  6. MaxCompute全套攻略
  7. HTML如何长截图谷歌,『技巧』如何利用Chrome进行网页长截图
  8. iphone4刷android,iPhone4如何刷机
  9. 高数_第6章无穷级数__幂级数_收敛点收敛域收敛半径
  10. 光学设计知识总结(ZEMAX预备知识)