方法一:迭代

解题思路

遍历过程,同时反转,这里需要一个指针 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. 反转链表 | 迭代 + 递归的更多相关文章

  1. Leetcode题目206.反转链表(简单)

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

  2. 【LeetCode】206. 反转链表

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

  3. [LeetCode题解]92. 反转链表 II | 一次遍历 + 反转

    解题思路 将链表分为三部分:[0, m).[m, n].(n, L],其中 L 为链表长度. 第一步:使用虚拟头节点 dummy,用于将 head 也能参与操作: 第二步:找到第 m-1 节点(fir ...

  4. LeetCode 206. 反转链表(Reverse Linked List) 16

    206. 反转链表 206. Reverse Linked List 题目描述 反转一个单链表. 每日一算法2019/5/19Day 16LeetCode206. Reverse Linked Lis ...

  5. 每天一道面试题LeetCode 206 -- 反转链表

    LeetCode206 反转链表 思路 代码 # # @lc app=leetcode.cn id=206 lang=python3 # # [206] 反转链表 # # https://leetco ...

  6. leetCode:206 反转链表

    206. 反转链表 题目:反转一个单链表. 进阶:链表可以迭代或递归地反转.你能否两个都实现一遍? 非递归代码: class Solution { public ListNode reverseLis ...

  7. Java实现 LeetCode 206 反转链表

    206. 反转链表 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL ...

  8. leetcode 206. 反转链表 及 92. 反转链表 II

    206. 反转链表 问题描述 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1-> ...

  9. Leetcode春季打卡活动 第二题:206. 反转链表

    Leetcode春季打卡活动 第二题:206. 反转链表 206. 反转链表 Talk is cheap . Show me the code . /** * Definition for singl ...

随机推荐

  1. php安装kafka扩展

    https://blog.csdn.net/zsl10/article/details/78743335 https://blog.csdn.net/lw545034502/article/detai ...

  2. sql查询:部门工资前三高的员工和部门工资最高的员工

    创建表:Create table If Not Exists Employee (Id int, Name varchar(255), Salary int, DepartmentId int);Cr ...

  3. R语言学习网站(分享)

    1. https://www.r-bloggers.com/ 2. https://www.kaggle.com/datasets 3. RStudio download: https://www.r ...

  4. 求职时这样回答问题你就输了!来自IT类面试官视角的深度解读

    摘要:在IT工程师准备写简历时,经常会遇到这些令人头疼的问题:应届生没有实践经验:不确定哪些信息该写不该写:不知道如何在简历上展现自己的优势:不知道如何编写项目经验一栏:为了高大上写上了自己不熟悉的技 ...

  5. 使用 k8s 搭建 confluence 6.10.x 版本

    将公司中已有的 confluence 服务迁移到 k8s 集群中,需要保留当前已有的数据.整体需要分为如下几个步骤: 备份 mysql 数据 备份 confluence 安装目录 备份 conflue ...

  6. leo101

    tags: 贪心 date: 2019-4-4 jag2017autumnJ Farm Village 题面 题目链接 翻译 数轴上有 n 个村庄,每个村庄可以生产两个单位的粮食.在每个村庄生产一单位 ...

  7. STM32入门系列-学习STM32要掌握的内容

    STM32芯片架构 STM32F103系列芯片的系统架构如下: STM32芯片基于ARM公司的Cortex-M3内核,由ST公司设计生产,内核与总线矩阵之间有I(指令).S(系统).D(数据)三条信号 ...

  8. Java学习的第三十二天

    1. 2.综合例题没太看懂 3.明天复习第十二章

  9. xlwt模块,(Excel表格)

    1. 安装模块 #pip install xlwt 2. 简单例子打印excel import xlwt # 创建一个workbook 设置编码 workbook = xlwt.Workbook(en ...

  10. 《Clojure编程》笔记 第2章 函数式编程

    目录 背景简述 第2章 函数式编程 背景简述 本人是一个自学一年Java的小菜鸡,理论上跟大多数新手的水平差不多,但我入职的新公司是要求转Clojure语言的.坊间传闻:通常情况下,最好是有一定Jav ...