[LeetCode题解]206. 反转链表 | 迭代 + 递归
方法一:迭代
解题思路
遍历过程,同时反转,这里需要一个指针 pre 要保存前一个节点。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode ReverseList(ListNode head) {
ListNode cur = head, pre = null;
while(cur != null) {
// 反转
var nextTmp = cur.next;
cur.next = pre;
pre = cur;
cur = nextTmp; // 继续遍历下一节点
}
return pre;
}
}
复杂度分析
- 时间复杂度:\(O(n)\),其中 \(n\) 为链表长度。
- 空间复杂度:\(O(1)\)。
方法二:递归
解题思路
递归最重要的是定义函数的功能,本题的 ReverseList 函数就是反转链表。
其次是找出结束条件:
if(head == null || head.next == null) {
return head;
}
最后是找出递推公式,假设只有链表只有两个节点时,这两个节点的交换如下:
head.next.next = head;
head.next = null;
对于第 n 个节点,以及其第 n+1 个节点有:
ListNode last = ReverseList(head.next);
head.next.next = head;
head.next = null;
return last;
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head == null || head.next == null) {
return head;
}
ListNode last = ReverseList(head.next);
head.next.next = head;
head.next = null;
return last;
}
}
复杂度分析
- 时间复杂度:\(O(n)\),其中 \(n\) 为链表长度。
- 空间复杂度:\(O(n)\),递归调用了 \(n\) 次,需要额外的调用栈空间。
[LeetCode题解]206. 反转链表 | 迭代 + 递归的更多相关文章
- Leetcode题目206.反转链表(简单)
题目描述: 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: ...
- 【LeetCode】206. 反转链表
题目 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可 ...
- [LeetCode题解]92. 反转链表 II | 一次遍历 + 反转
解题思路 将链表分为三部分:[0, m).[m, n].(n, L],其中 L 为链表长度. 第一步:使用虚拟头节点 dummy,用于将 head 也能参与操作: 第二步:找到第 m-1 节点(fir ...
- LeetCode 206. 反转链表(Reverse Linked List) 16
206. 反转链表 206. Reverse Linked List 题目描述 反转一个单链表. 每日一算法2019/5/19Day 16LeetCode206. Reverse Linked Lis ...
- 每天一道面试题LeetCode 206 -- 反转链表
LeetCode206 反转链表 思路 代码 # # @lc app=leetcode.cn id=206 lang=python3 # # [206] 反转链表 # # https://leetco ...
- leetCode:206 反转链表
206. 反转链表 题目:反转一个单链表. 进阶:链表可以迭代或递归地反转.你能否两个都实现一遍? 非递归代码: class Solution { public ListNode reverseLis ...
- Java实现 LeetCode 206 反转链表
206. 反转链表 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL ...
- leetcode 206. 反转链表 及 92. 反转链表 II
206. 反转链表 问题描述 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1-> ...
- Leetcode春季打卡活动 第二题:206. 反转链表
Leetcode春季打卡活动 第二题:206. 反转链表 206. 反转链表 Talk is cheap . Show me the code . /** * Definition for singl ...
随机推荐
- php安装kafka扩展
https://blog.csdn.net/zsl10/article/details/78743335 https://blog.csdn.net/lw545034502/article/detai ...
- sql查询:部门工资前三高的员工和部门工资最高的员工
创建表:Create table If Not Exists Employee (Id int, Name varchar(255), Salary int, DepartmentId int);Cr ...
- R语言学习网站(分享)
1. https://www.r-bloggers.com/ 2. https://www.kaggle.com/datasets 3. RStudio download: https://www.r ...
- 求职时这样回答问题你就输了!来自IT类面试官视角的深度解读
摘要:在IT工程师准备写简历时,经常会遇到这些令人头疼的问题:应届生没有实践经验:不确定哪些信息该写不该写:不知道如何在简历上展现自己的优势:不知道如何编写项目经验一栏:为了高大上写上了自己不熟悉的技 ...
- 使用 k8s 搭建 confluence 6.10.x 版本
将公司中已有的 confluence 服务迁移到 k8s 集群中,需要保留当前已有的数据.整体需要分为如下几个步骤: 备份 mysql 数据 备份 confluence 安装目录 备份 conflue ...
- leo101
tags: 贪心 date: 2019-4-4 jag2017autumnJ Farm Village 题面 题目链接 翻译 数轴上有 n 个村庄,每个村庄可以生产两个单位的粮食.在每个村庄生产一单位 ...
- STM32入门系列-学习STM32要掌握的内容
STM32芯片架构 STM32F103系列芯片的系统架构如下: STM32芯片基于ARM公司的Cortex-M3内核,由ST公司设计生产,内核与总线矩阵之间有I(指令).S(系统).D(数据)三条信号 ...
- Java学习的第三十二天
1. 2.综合例题没太看懂 3.明天复习第十二章
- xlwt模块,(Excel表格)
1. 安装模块 #pip install xlwt 2. 简单例子打印excel import xlwt # 创建一个workbook 设置编码 workbook = xlwt.Workbook(en ...
- 《Clojure编程》笔记 第2章 函数式编程
目录 背景简述 第2章 函数式编程 背景简述 本人是一个自学一年Java的小菜鸡,理论上跟大多数新手的水平差不多,但我入职的新公司是要求转Clojure语言的.坊间传闻:通常情况下,最好是有一定Jav ...