【leetcode】LCR 123. 图书整理 I(简单)题解学习

题目描述:

书店店员有一张链表形式的书单,每个节点代表一本书,节点中的值表示书的编号。为更方便整理书架,店员需要将书单倒过来排列,就可以从最后一本书开始整理,逐一将书放回到书架上。请倒序返回这个书单链表。

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public int[] reverseBookList(ListNode head) {}
}

示例 1:

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

提示:

0 <= 链表长度 <= 10000

代码实现:

方法一:

要将书单链表反转,我们可以使用迭代或递归的方法。将给定的单链表反转,并将反转后的结果存储在一个数组中返回。以下是一种可能的实现:

class Solution {public int[] reverseBookList(ListNode head) {// 计算链表长度int len = 0;ListNode curr = head;while (curr != null) {len++;curr = curr.next;}// 将链表反转ListNode prev = null;curr = head;while (curr != null) {ListNode nextTemp = curr.next;curr.next = prev;prev = curr;curr = nextTemp;}// 将反转后的链表节点值存储到数组中int[] result = new int[len];int i = 0;curr = prev;while (curr != null) {result[i++] = curr.val;curr = curr.next;}return result;}
}

在上述代码中,我们首先计算出原始链表的长度 len,然后利用迭代的方式将链表反转,并将反转后的节点值存储到数组中,最后返回该数组即可。

需要注意的是,当链表为空或只有一个节点时,反转链表不需要进行任何操作,直接返回原始链表即可。

同时,也需要注意代码的鲁棒性,即对于空链表或空数组,需要进行特殊处理,保证程序正确运行。

在上述方法中,我们首先遍历链表来计算长度,然后再进行反转操作。这个过程需要两次遍历链表,因此可以考虑优化性能,只进行一次遍历。

以下是一种只进行一次遍历的优化方法:

class Solution {public int[] reverseBookList(ListNode head) {// 处理空链表情况if (head == null) {return new int[0];}ListNode prev = null;ListNode curr = head;int len = 0;while (curr != null) {ListNode nextTemp = curr.next;curr.next = prev;prev = curr;curr = nextTemp;len++;}// 将反转后的链表节点值存储到数组中int[] result = new int[len];int i = 0;while (prev != null) {result[i++] = prev.val;prev = prev.next;}return result;}
}

在这个优化的方法中,我们先处理空链表的情况,如果链表为空,则直接返回一个空数组。然后我们使用一个变量 len 记录链表的长度,同时在进行链表反转的同时,将节点值存储到数组中,最后返回该数组。

这个优化方法只需要一次遍历就可以完成链表反转和数组构建,相比于之前的方法减少了一次遍历,因此可以提升性能。

方法二:

使用栈和数组的方式:

import java.util.Stack;class Solution {public int[] reverseBookList(ListNode head) {// 处理空链表情况if (head == null) {return new int[0];}Stack<Integer> stack = new Stack<>();ListNode curr = head;while (curr != null) {stack.push(curr.val);curr = curr.next;}int[] result = new int[stack.size()];int i = 0;while (!stack.isEmpty()) {result[i++] = stack.pop();}return result;}
}

在这个方法中,我们使用一个栈来存储链表节点值。首先,遍历链表,将节点值依次入栈。然后,创建一个新的数组,长度为栈的大小,依次将栈中的元素出栈并存储到数组中。

这种方法的时间复杂度为 O(n),其中 n 是链表的长度。因为需要遍历链表一次来入栈,然后再遍历栈一次来构建数组。

注意,在这种方法中,由于使用了额外的栈来存储链表节点值,因此会占用额外的空间。如果空间复杂度是一个关注点,那么迭代或递归的方法可能更适合。

以上使用递归和栈辅助的两种方法的时间和空间复杂度都是 O(N)。

对于使用递归的方法,在每一次递归调用中,都会向链表的尾部逐步递进,因此时间复杂度为 O(N),其中 N 是链表的长度。另外,由于递归调用的层数不超过链表的长度,因此递归方法的空间复杂度也是 O(N)。

对于使用栈辅助的方法,在遍历链表时,需要将每个节点的值存储到栈中,因此空间复杂度为 O(N)。另外,在遍历栈并构建反转后的链表时,需要遍历整个栈,时间复杂度也是 O(N)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/670227.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RP2040 SPI

SPI 的库文件是arduino开源库&#xff0c;在程序中include。 SPI IIC都是通信协议【模块】&#xff0c;需要硬件支持&#xff0c;MCU都会集成相应的模块。arduino都集成在了内核中&#xff0c;直接用API函数调用即可。其他单片机的架构也是相同的。 SPI的库和函数及其相关说明…

已解决org.springframework.context.ApplicationContextException异常的正确解决方法,亲测有效!!!

已解决org.springframework.context.ApplicationContextException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 文章目录 问题分析 报错原因 解决思路 解决方法 步骤1: 检查异常细节 步骤2: 验证外部依赖 步骤3: 校验Spring配置 步骤…

LeetCode第1124题 - 表现良好的最长时间段

题目 给你一份工作时间表 hours&#xff0c;上面记录着某一位员工每天的工作小时数。 我们认为当员工一天中的工作小时数大于 8 小时的时候&#xff0c;那么这一天就是「劳累的一天」。 所谓「表现良好的时间段」&#xff0c;意味在这段时间内&#xff0c;「劳累的天数」是严格…

GUI编程..

1.GUI(Graphical User Interface 图形用户界面) 所谓GUI 指的是在计算机中采用图形方式展示用户的界面 在GUI之前采用的是字符界面 有了GUI之后 采用的则是图形界面 2.Java的GUI编程方案 常见的有四种 3.Swing 1.实现一个窗口 public class Main{public static void ma…

网络编程面试系列-02

1. 为什么 TCP 握手三次,挥手四次? 因为只有在客户端和服务端都没有数据要发送的时候才能断开TCP。而客户端发出FIN报文时只能保证客户端没有数据发了,服务端还有没有数据发客户端是不知道的。 服务端收到客户端的FIN报文后只能先回复客户端一个确认报文来告诉客户端,服务…

眼动追踪系统体验实验(脑与认知期末考核)

实验名称&#xff1a;眼动追踪系统体验实验 实验目的&#xff1a; 本实验旨在通过体验脑与认知眼动追踪系统&#xff0c;了解该技术在心理学、认知科学等领域的应用&#xff0c;理解它是怎样工作的&#xff0c;探究眼动追踪技术如何揭示人类认知过程的奥秘。 实验环境&#…

155基于matlab 的形态学权重自适应图像去噪

基于matlab 的形态学权重自适应图像去噪&#xff1b;通过串并联的滤波降噪对比图&#xff0c;说明并联降噪的优越性。输出降噪前后图像和不同方法的降噪情况的信噪比。程序已调通&#xff0c;可直接运行。 155matlab 自适应图像降噪 串并联降噪 (xiaohongshu.com)

一些参数(仅供个人理解)

1.mAP&#xff1a; 数据集的平均准确率 mAP50-95&#xff1a;mAP阈值为50到mAP阈值为95&#xff0c;间隔5%,取得10个mAP值&#xff0c;然后对这十个值取平均。 目标检测评估指标mAP&#xff1a;从Precision,Recall,到AP50-95【未完待续】_map50和map50-95-CSDN博客 2.IoU&a…

使用VASPKIT生成非整数倍扩胞结构

在计算某些任务时需要根据原胞进行非对称或者根号倍扩胞&#xff0c;使用vaspkit可以构建一个扩胞倍数矩阵&#xff0c;这样可以获得特定方向非整数倍的扩胞结构。 这里使用的命令为vaspkit的400模块 注意400的命令会让你连续输入三行&#xff0c;每行都需要三个数值&#xff0…

智能优化算法 | Matlab实现飞蛾扑火(MFO)(内含完整源码)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 智能优化算法 | Matlab实现飞蛾扑火(MFO)(内含完整源码) 源码设计 %%%% clear all clc SearchAgents_no=100; % Number of search ag

使用zip4j解压zip时文件名乱码解决最好的方案

zip4j解压zip时&#xff0c;出现中文乱码&#xff0c;看了下&#xff0c;zip4j解压时支持设置文件编码&#xff0c;我们只需要识别文件是不是utf-8编码&#xff0c;如果不是utf-8就使用gbk解压&#xff0c;但是这个判断没有100%准确的方式&#xff0c;我试过通过字节流的bom标记…

《动手学深度学习(PyTorch版)》笔记7.5

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过&…

聚观早报 | iOS 17.4正式版将上线;魅族21 Pro或下月发布

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 2月5日消息 iOS 17.4正式版将上线 魅族21 Pro或下月发布 小米MIX Flip细节曝光 OPPO Find X7 Ultra卫星通信版 …

BUUCTF-Real-[ThinkPHP]IN SQL INJECTION

目录 漏洞描述 漏洞分析 漏洞复现 漏洞描述 漏洞发现时间&#xff1a; 2018-09-04 CVE 参考&#xff1a;CVE-2018-16385 最高严重级别&#xff1a;低风险 受影响的系统&#xff1a;ThinkPHP < 5.1.23 漏洞描述&#xff1a; ThinkPHP是一款快速、兼容、简单的轻量级国产P…

Java实现用户画像活动推荐系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 兴趣标签模块2.3 活动档案模块2.4 活动报名模块2.5 活动留言模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 数据流程设计3.4 E-R图设计 四、系统展示五、核心代码5.1 查询兴趣标签5.2 查询活动推荐…

Java智慧云智能教育平台

技术架构&#xff1a; SpringBoot Mybatis Shiro mysql redis 有需要该项目的小伙伴可以私信我你的Q。 功能描述&#xff1a; 支持多种题型&#xff1a;选择题、多选题、判断题、填空题、综合题以及数学公式。支持在线考试&#xff0c;教师在线批改试卷。 功能模块&am…

02. k210-在windows环境下烧录.bin文件

有些人的虚拟机串口可能没有设置好&#xff0c;不能在ubuntu下使用命令kflash 下载程序&#xff0c;那么本章介绍如何在windows10 环境下使用荔枝派的开源上位机 kflash_gui 来下载程序。 使用的开发板是荔枝派&#xff1a;Sipeed Maix Bit (带麦克风) 开发板。 1. 下载kflash_…

业务架构设计之汽配供应链与实现的实践总结

随着汽车行业的不断发展&#xff0c;汽配供应链的规模和复杂度也在不断增加。为了满足市场需求&#xff0c;建立一个高效、可靠的汽配供应链业务系统至关重要。本文将总结一些关键的实践经验&#xff0c;帮助读者了解如何设计和实现一个稳定且高效的汽配供应链业务系统。 1. 业…

第1节、电路连接【51单片机+L298N步进电机系列】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本节介绍如何搭建一个51单片机L298N步进电机控制电路&#xff0c;所用材料均为常见的模块&#xff0c;简单高效的方式搭建起硬件环境。 一、硬件清单 ①51单片机模块 ②恒流模块 ③开关电源 ④L298N模…

hexo和github.io博客的搭建

简要&#xff1a; 最近在牛客网上看到有很多应届毕业生大佬的求职简历上都写上了自己的博客地址&#xff0c;并且在acwing上看到图图佬&#xff0c;铅笔佬也有自己的博客地址&#xff0c;大部分都采用了自己搭建博客的方式&#xff0c;而不是用脏乱差的csdn来写博客。所以我也采…