当前位置: 首页 > news >正文

【LeetCode】剑指 Offer 24. 反转链表 p142 -- Java Version

题目链接:https://leetcode.cn/problems/fan-zhuan-lian-biao-lcof/submissions/

1. 题目介绍(24. 反转链表)

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

【测试用例】:
示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

【条件约束】:

限制:

  • 0 <= 节点个数 <= 5000

【相关题目】:

注意:本题与主站 206. 反转链表 题目相同。

2. 题解

2.1 原书题解 双指针+临时指针(记录cur.next)-- O(n)

时间复杂度O(n),空间复杂度O(1)

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) { val = x; }* }*/
class Solution {public ListNode reverseList(ListNode head) {// 判空:// 1. 如果头节点为空,那么返回空// 2. 如果头节点的下一个节点为空,那么返回头节点if (head == null || head.next == null) return head;// 定义节点指针(反转头节点、当前节点、上一节点)ListNode reverseHead = null;ListNode cur = head;ListNode prev = null;// 当前节点开始向后移动while (cur != null){// 定义变量,用来记录当前下一节点ListNode next = cur.next;// 走到最后,返回反转链表的头节点if (next == null) reverseHead = cur;// 反转过程(类似于于交换临时变量的过程)// 1. 当前节点的下一节点指向前一节点// 2. 前一节点指向当前节点// 3. 当前节点则指向提前记录好的下一节点cur.next = prev;prev = cur;cur = next;  }return reverseHead;}
}

在这里插入图片描述

2.2 递归 – O(n)

时间复杂度O(n),空间复杂度O(n)
在这里插入图片描述

class Solution {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;}
}

在这里插入图片描述

2.3 迭代 – O(n)

时间复杂度O(n),空间复杂度O(1)
在这里插入图片描述

class Solution {public ListNode reverseList(ListNode head) {ListNode cur = head, pre = null;while(cur != null) {ListNode tmp = cur.next; // 暂存后继节点 cur.nextcur.next = pre;          // 修改 next 引用指向pre = cur;               // pre 暂存 curcur = tmp;               // cur 访问下一节点}return pre;}
}

在这里插入图片描述

3. 参考资料

[1] 剑指 Offer 24. 反转链表(迭代 / 递归,清晰图解)-- 2.3 迭代法参考 & 2.2 递归图源
[2] 反转链表 – 2.2 递归法参考

http://www.lryc.cn/news/34988.html

相关文章:

  • LAY-EXCEL导出excel并实现单元格合并
  • 配置VM虚拟机Centos7网络
  • Kafka 位移主题
  • 详细讲解零拷贝机制的进化过程
  • 2023年场外个股期权研究报告
  • k8s pod,ns,pvc 强制删除
  • 力扣第99场双周赛题目记录(复盘)
  • spring事务失效原因
  • pikachu靶场CSRF之TOKEN绕过
  • Windows中配置docker没有hyper-v功能解决方案
  • 电子台账:模板制作之五——二级过滤与多条件组合
  • Kaldi Data preparation
  • libevent 学习笔记
  • jupyter的使用
  • 中级数据开发工程师养成计
  • fastjson 返回 $ref 数据
  • Zookeeper特性和节点数据类型详解
  • Java代码是如何被CPU狂飙起来的?
  • Dynamics365安装失败解决及注册编写
  • Kafka 集群参数
  • 等保2.0与1.0 测评要求的变化
  • nodejs学习巩固笔记-nodejs基础,Node.js 高级编程(核心模块、模块加载机制)
  • 2023年春【移动计算技术】文献精读(二)-3 || 附:创新点、创新思想和技术路线总结
  • 企业新闻稿的格式和要求是什么?如何写好新闻稿?
  • String类的底层原理和版本演变
  • 软考高级信息系统项目管理师系列之二十三:项目采购管理
  • SpringMVC-0308
  • [数据结构]:14-选择排序(顺序表指针实现形式)(C语言实现)
  • 基于C/C++综合训练 ----- 贪吃蛇
  • Unity 混合操作(Blending)