Java反转链表,简单算法

news2024/12/25 9:27:24

文章目录

  • 一、题目
  • 二、答案
  • 三、我的解决思路
  • 总结

Java 单向链表,指的是一种数据结构,用于存储一系列的元素。每个元素包含两部分:一个存储数据的值和一个指向下一个元素的引用。

单向链表由多个节点组成,每个节点都包含一个数据元素和一个指向下一个节点的引用。
链表的起始节点称为头节点,尾节点的引用为空(null)。
每个节点通过指针(引用)连接在一起,形成链表的结构。
在这里插入图片描述

一、题目

描述:
给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。

数据范围:
0 ≤ n ≤ 000
要求:空间复杂度 O(1) ,时间复杂度 O(n) 。

如当输入链表{1,2,3}时,
经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。
以上转换过程如下图所示:
在这里插入图片描述

二、答案

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    public ListNode ReverseList(ListNode head) {
        if(null == head) return null;
        ListNode newList = null;
        while (head != null) {
            ListNode temp = head.next; //临时存储,并移位
            head.next = newList;//当前节点指向上一个节点
            newList = head;//指针后移更新新链表
            head = temp;//指针后移更新旧链表
        }
        return newList;
    }

}

三、我的解决思路

链表的操作是一个挪指针的过程。这是一个单向链表,next是指向下一个节点的方法。
这个题的基本思路就是:不断获取下一个节点放到末尾。
不看代码,先搞个清楚逻辑:
1.默认链表head:1,2,3
2. head.next:2,3

现在我想要获取1,放到next后边就可以完成第一步了。
解决方案就是给默认链表的next置空就搞定了。新建一个链表newList

3.ListNode newList = null;head.next=newList;

这时候默认链表head变成:1

4.此刻head.next:null

到目前为止就反转了第一步了。
但是发现3没了,那处理方案就是搞个临时链表存着next就可以了,这个需要再最开始就操作,不然		到这块3已经没了。

0.临时链表temp=head.next:2,3

5.将head给到newList就完成第一步了:newList = head,newList --> 1

下面还得继续操作head,但是head中只有1是不行的,所以将临时链表给到head。

6.head=temp,head:2,3

依次往复:

0.temp:3
1.head:2,3
2.head.next:3
3.head.next = newList;head:2,1
4.newList = head;newList:2,1
5.head = temp;head:3

再来一次:
0.temp:空
1.head:3
2.head.next:空
3.head.next = newList;head:3,2,1
4.newList = head;newList:3,2,1
5.head = temp;head:空

while判断head不空,此刻head为空了,跳出循环,反转结束。

return newList;

总结

单链表反转是一个基础的算法问题,通常可以通过迭代或递归两种方法来解决。迭代法的时间复杂度为 O(n),空间复杂度为 O(1);递归法的时间复杂度为 O(n),空间复杂度为 O(n)。在实际应用中,应根据具体情况选择合适的解法。

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

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

相关文章

socket网络编程几大模型?看看CHAT是如何回复的?

CHAT回复:网络编程中常见的有以下几种模型: 1. 阻塞I/O模型(Blocking I/O):传统的同步I/O模型,一次只处理一个请求。 2. 非阻塞I/O模型(Non-blocking I/O):应用程序轮询…

Docker入门安装、镜像与容器下载 —— 基本操作

目录 前言 Docker 1. docker介绍 2. docker安装 3. docker基本使用 3.1 镜像下载 3.2 操作容器 前言 虚拟机:基于主机(物理机或虚机)的多服务实例。在该模式下,软件开发人员可以提供单个或多个物理机或虚机,同时在每个主机上运行多个服…

开发需求总结10-修改el-form-item的label,实现换行并且修改换行字体的样式

需求描述: 目录 需求描述: 相关代码: 额外拓展: 在form表单上,有个别label可能需要在下方有红色小字用来提示,这条数据的注意点,此时就需要实现label可以换行,并且给下面的小字设置…

【学习笔记】2、逻辑代数与硬件描述语言基础

2.1 逻辑代数 (1)逻辑代数的基本定律和恒等式 基本定律或 “”与 “”非 “—”0-1律A0AA11AAAA A ‾ \overline{A} A1(互补律)A00A1AAAAA A ‾ \overline{A} A0 A ‾ ‾ \overline{\overline{A}} AA结合律(AB)C A(BC)(AB)CA(BC)ABC交换律AB BAABBA分…

exFAT文件系统识别不了怎么办?

一般存储驱动器通常会使用几种文件系统,其中比较常见的是FAT32、NTFS和exFAT,那么它们之间有什么区别呢?exFAT文件系统识别不了怎么办? 常用文件系统之间的区别有哪些? FAT32文件系统:它是一个兼容性非常强…

知识分享:一文读懂AIGC与大模型

什么是大模型? 关于大模型,有学者称之为“大规模预训练模型”(large pretrained language model),也有学者进一步提出”基础模型”(Foundation Models)的概念。 “小模型”:针对特定应用场景需求进行训练&a…

快快销ShopMatrix 分销商城多端uniapp可编译5端 - 佣金倍数提现

本文来自应用中心-9999款应用在线选购 "佣金倍数提现"这个概念在不同的上下文中可能有不同的含义,但通常它涉及到基于用户赚取的佣金来设定提现条件。这是一种常见的机制,尤其是在那些提供佣金或回扣的平台上,如联盟营销、金融交易…

武汉灰京文化:抓住用户心理,游戏推广不可或缺的前提

在当今激烈竞争的游戏市场中,了解目标用户成为游戏推广的不可或缺的前提。不同类型的游戏适合不同的用户群体,因此通过深入研究用户画像,准确定位目标用户群体,成为游戏成功推广的关键一环。游戏推广不仅仅是让更多的人知道游戏的…

三方接口对接常见数据处理方式汇总

文章目录 数据请求格式application/json接收发送 multipart/form-data接收发送 application/x-www-form-urlencoded接收发送 text/xml接收发送 Request请求中各个数据载体获取方法HeaderParameterInputStreamAttribute 二次封装HttpServletRequest参考 验签与加密 日常开发中&a…

运筹说 第90期 | 网络计划-图解评审法

前述章节的网络计划方法主要研究以时间为主要参数的确定型网络模型,其中的概率型网络模型也只讨论工作公式的不确定性,并没有对事项或工作的不确定性进行讨论。由于这类网络模型的建立有严格的规则,大量研究与开发类计划尚无法表达。因从本期…

【51单片机系列】单片机与PC进行串行通信

一、单片机与PC机串行通信的设计 工业现场的测控系统中,常使用单片机进行监测点的数据采集,然后单片机通过串口与PC通信,把采集的数据串行传送到PC机上,再在PC机上进行数据处理。 PC机配置的都是RS-232标准串口,为D型…

steam游戏搬砖项目还能火多久?

最近放假回到老家,见了不少亲戚朋友,大家不约而同都在感叹今年大环境不好,工作不顺,生意效益不好,公司状况不佳,反问我们生意如何?为了让他们心里好受一点,我也假装附和道:也不咋地&…

【项目经验】详解Puppeteer入门及案例

文章目录 一.项目需求及Puppeteer是什么?二.Puppeteer注意事项及常用的方法1.注意事项2.常用的方法*puppeteer.launch()**browser.newPage()**page.goto()**page.on(request,()> {})**page.e…

如何根据水利需求选择合适的遥测终端机

在水利信息化建设中,遥测终端机作为关键的设备之一,发挥着越来越重要的作用。如何根据实际的水利需求选择合适的遥测终端机,成为了众多企业和单位关注的焦点。本文将为您揭示遥测终端机的选择之道,助您在水利信息化建设中取得事半…

微信接入知识库定制化的AI会怎样?

想不想要一个更加了解你的chatgpt?或者想给chatgpt加入特定的知识库? LinkAI来帮你! 通过LinkAI,无需openai的api key,直接使用chatgpt。无需考虑服务器代理配置,openai账号注册等!自定义知识…

3.3.3 使用集线器的星形拓扑

3.3.3 使用集线器的星形拓扑 集线器的一些特点 3.3.4 以太网的信道利用率 多个站在以太网上同时工作就可能会发生碰撞当发生碰撞时,信道资源实际上是被浪费了。因此,当扣除碰撞所造成的信道损失后,以太网总的信道利用率并不能达到100% 3.…

多个table的选中问题

多个table的选中问题 场景:循环出来多个table,最后拿到所有选中的数据 出现的问题:比如先选择第一个table的某些数据,再去选另外的table,这样selection里面只有最后选中的table的数据。 解决方法:在sele…

接口interface--java学习笔记

认识接口 java提供了一个关键字interface,用这个关键字可以定义出一个特殊的结构:接口在接口里面定义的变量,不管加不加public static final修饰都默认为常量,必须赋初值在接口里面定义的方法,不管加不加public abstr…

Java实现高校大学生创业管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统公告模块2.2 创业项目模块2.3 创业社团模块2.4 政府政策模块2.5 创业比赛模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 系统公告表3.2.2 创业项目表3.2.3 创业社团表3.2.4 政策表 四、系统展示五、核心代码5.…

操作系统详解(5.2)——信号(Signal)的题目进阶

系列文章: 操作系统详解(1)——操作系统的作用 操作系统详解(2)——异常处理(Exception) 操作系统详解(3)——进程、并发和并行 操作系统详解(4)——进程控制(fork, waitpid, sleep, execve) 操作系统详解(5)——信号(Signal) 操作系统详解(5.1)——信号(Signal)的相…