反转链表——Java递归求解
今天刷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递归求解相关推荐
- 《LeetCode力扣练习》第206题 反转链表 Java
<LeetCode力扣练习>第206题 反转链表 Java 一.资源 题目: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 示例 1: 输入:head = [1,2, ...
- 《LeetCode力扣练习》剑指 Offer 24. 反转链表 Java
<LeetCode力扣练习>剑指 Offer 24. 反转链表 Java 一.资源 题目: 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1-& ...
- 反转链表JAVA算法_链表反转算法
1 packagecom.trs.codetool.sort;2 3 /** 4 *@authorzheng.changgang5 * @date 2020-01-02 09:576 * 链表的常见算 ...
- 反转链表 python 递归_LeetCode 206.反转链表(Python3)
题目: 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你 ...
- 剑指 Offer 24. 反转链表java
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3-&g ...
- LeetCode 热题 HOT 100 -------160. 相交链表(链表)206. 反转链表(递归、回溯)
dsadas /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* L ...
- 链表之反转链表,万金油的解题方法(java求解)
链表之反转链表,一招鲜吃遍天(java求解) 内容目录 链表之反转链表,一招鲜吃遍天(java求解) 解题万金油 栗子1:反转整个链表 栗子2:反转某个区间内的链表 栗子3:按照k为一组,反转某个区间 ...
- [Leedcode][JAVA][第25题][K个一组反转链表][链表][递归]
[问题描述][第25题][K个一组反转链表][困难] 时间复杂度:O(N^2) 空间复杂度:O(1) ```java 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表.k 是一个正整数, ...
- [剑指offer][JAVA]面试题第[24]题[反转链表][递归][双指针][头插法]
[问题描述][中等] 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点.示例:输入: 1->2->3->4->5->NULL 输出: 5->4 ...
- java 链表反转_面试必备 | 不可不会的反转链表
反转链表这题真的是面试非常喜欢考的了,这题看起来简单,但是能用两种方法一遍 bug free 也是不容易的,面试的时候可以筛下来一大批人,无论是对 junior 还是 senior 面试都很爱考.今天 ...
最新文章
- java 中调用window系统中的文件,或者执行命令(shell、.CMD、.EXE)并获取返回值
- 服务器日志清理及IIS日志的清理
- java mina unix client
- [导入]MSIL: call callvirt
- 培养创造性思维的20个技巧
- Angular2 初识
- 对象创建型 - 单利模式
- 对棋盘完美覆盖问题证明过程的质疑及其解决
- SIAM International Conference on Data Mining, SDM 会议怎么样?
- python: 使用正则表达式的时候,传递参数的方法:
- 创维酷开电视能换成android系统吗,创维酷开电视怎么系统升级【图文教程】
- sql2000海量存储过程(1500w数据,分页只需1秒)
- 传智播客杨中科老师的全13季 C#、Asp.net视频教程
- 用PHP实现手机对jar,jad文件的下载(转)
- Linux软件安装方法之rpm包安装
- 德保罗大学计算机排名,德保罗大学费用
- 注意:这些跳槽理由会被HR调查!
- 跟我学药物设计 | 药物研发的过程和药物设计的意义
- 巴东县黄土坡滑坡GNSS自动化位移监测解决方案
- WinEdt, eso-pic.sty not found
热门文章
- [1034]安装Xposed框架+JustTrustMe
- burp抓取APP数据包+安装Xposed+Just TrustMe
- 康佳电视系统升级服务器地址,康佳电视各平台升级方法及强制刷机汇总
- 普通人适合哪种O2O创业模式 O2O模式的应用价值是什么?
- 计算机网络编程基础知识总结思维导图
- MaxCompute全套攻略
- HTML如何长截图谷歌,『技巧』如何利用Chrome进行网页长截图
- iphone4刷android,iPhone4如何刷机
- 高数_第6章无穷级数__幂级数_收敛点收敛域收敛半径
- 光学设计知识总结(ZEMAX预备知识)