Leetcode刷题 206. 反转链表 递归迭代两种方法实现
时间:2022-07-26
本文章向大家介绍Leetcode刷题 206. 反转链表 递归迭代两种方法实现,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目链接
**链接**:https://leetcode-cn.com/problems/reverse-linked-list/
题目描述
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
预置代码
/**
* 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)进行链表反转**
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;
}
**精解后的代码**
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;
}
大家如果觉得光看代码难以理解可以通过边画图边读代码的方式来进行理解,这样我感觉学起来更容易
方法二:迭代
这个理解起来应该比递归要容易的多
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刷题系列,我会每日一更或者每日多更,想一起刷题的小可爱们可以私信或者关注我我们一同学习
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux命令搜索命令whereis与which的区别
- centos6.5服务器安装Nginx设置服务和开机自启的方法
- linux系统挂载数据盘的方法(视频图文教程)
- CentOS7 Docker Nginx部署及运行详解
- linux下安装memcached_动力节点Java学院整理
- OneinStack一键安装PHP/JAVA/HHVM和超详细的VPS手动安装LNMP的方法
- RTSP协议视频平台EasyNVR如何将静态广告位修改为动态广告位?
- keeplive+mysql+drbd高可用架构安装步骤
- IP摄像头RTSP协议视频平台EasyNVR录像列表没有按照开始时间倒序排序的问题修复
- leetcode哈希表之两数之和
- Linux系统下Tomcat8启动速度很慢的解决方法
- Linux下查看binlog文件创建时间的命令
- Linux下修改文件权限(所有权)
- Sticks(UVA - 307)【DFS+剪枝】
- Linux CentOS服务器搭建与初始化配置教程