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

leetcode hot100 之【LeetCode 206. 反转链表】 java实现

LeetCode 206. 反转链表

题目描述

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:

输入:head = [1,2]
输出:[2,1]

示例 3:

输入:head = []
输出:[]

Java 实现解法

方法一:迭代
/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) { val = x; }* }*/class Solution {public ListNode reverseList(ListNode head) {ListNode prev = null;ListNode curr = head;while (curr != null) {ListNode nextTemp = curr.next; // 保存当前节点的下一个节点curr.next = prev; // 将当前节点指向前一个节点,实现反转prev = curr; // 前一个节点前移curr = nextTemp; // 当前节点前移}return prev; // 当curr为null时,prev就是反转后的头节点}
}
方法二:递归
class Solution {public ListNode reverseList(ListNode head) {if (head == null || head.next == null) {return head;}ListNode newHead = reverseList(head.next); // 递归反转下一个节点head.next.next = head; // 设置下一个节点的next为当前节点,实现反转head.next = null; // 当前节点的next设置为nullreturn newHead; // 返回新的头节点}
}

解题思路

  • 迭代方法

    • 使用三个指针 prevcurrnextTemp 来追踪和修改链表的节点。
    • prev 初始化为 nullcurr 初始化为头节点 head
    • 在循环中,首先保存 curr.nextnextTemp,然后将 curr.next 设置为 prev,实现反转。
    • prevcurr 都前移,直到 currnull,此时 prev 就是反转后的头节点。
  • 递归方法

    • 递归的基本情况是当链表为空或只有一个节点时,直接返回头节点。
    • 在递归调用中,我们首先反转下一个节点,然后调整当前节点的指针,使其指向前一个节点,最后返回新的头节点。

这两种方法的时间复杂度都是 O(n),其中 n 是链表的长度。空间复杂度对于迭代方法是 O(1),因为我们只使用了有限的额外空间;对于递归方法是 O(n),因为递归调用的栈空间。

注:来源leetcode网站

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

相关文章:

  • 基于Spring Cloud的电商系统设计与实现——用户与商品模块的研究(上)
  • Spring Boot + Vue 前后端分离项目总结:解决 CORS 和 404 问题
  • JVM篇(学习预热 - JVM正式展开 - (实战课程学习总结))(持续更新迭代)
  • WebGL编程指南 - 入门续
  • EPS导出DWG存在地物缺失或者没有编码属性的情况
  • 跨境业务收款难?Zoho Books来帮忙
  • 深入解析 Harris 角点检测算法:从孔径问题到响应函数的完整推导
  • 抖音视频制作怎么暂停画面,抖音视频怎么让它有暂停的效果
  • Android GPIO方式解码红外数据
  • 基于SpringBoot+Vue的益农智慧服务平台【提供源码+答辩PPT+参考文档+项目部署】
  • 基于springboot的在线考试与学习交流网页
  • JS异步编程进阶(二):rxjs与Vue、React、Angular框架集成及跨框架状态管理实现原理
  • nginx web代理
  • 人形机器人的关节控制
  • python 爬虫 入门 二、数据解析(正则、bs4、xpath)
  • PTX 汇编代码语法
  • 【mysql】统计两个相邻任务/事件的间隔时间以及每个任务的平均用时
  • RHCE——笔记
  • Spring Boot在知识管理中的应用
  • OpenCV高级图形用户界面(14)交互式地选择一个或多个感兴趣区域函数selectROIs()的使用
  • 字节青训营入营考核部分题解
  • Android调用系统打印图片
  • 网络最快的速度光速,因此‘‘光网络‘‘由此产生
  • WPF -- LiveCharts的使用和源码
  • spring 如何将mutipartFile转存到本地磁盘
  • 【学术会议-6】激发灵感-计算机科学与技术学术会议邀您参与,共享学术盛宴,塑造明天的科技梦想!
  • 模电基础(晶体管放大电路)
  • Python3 接口自动化测试,HTTPS下载文件(GET方法和POST方法)
  • rhce:列行性(at和cron)
  • kubernetes给service动态增加服务端口