面试算法24:反转链表

news2024/11/14 6:04:44

题目

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。例如,把图4.8(a)中的链表反转之后得到的链表如图4.8(b)所示。
在这里插入图片描述

分析

由于节点j的next指针指向了它的前一个节点i,因此链表在节点j和k之间断开,无法在链表中遍历到节点k。为了避免链表断开,需要在调整节点j的next指针之前把节点k保存下来。

也就是说,在调整节点j的next指针时,除了需要知道节点j本身,还需要知道节点j的前一个节点i,这是因为需要把节点j的next指针指向节点i。同时,还需要事先保存节点j的下一个节点k,以防止链表断开。因此,在遍历链表逐个反转每个节点的next指针时需要用到3个指针,分别指向当前遍历到的节点、它的前一个节点及后一个节点。

public class Test {
    public static void main(String[] args) {
        ListNode listNode1 = new ListNode(1);
        ListNode listNode2 = new ListNode(2);
        ListNode listNode3 = new ListNode(3);
        ListNode listNode4 = new ListNode(4);
        ListNode listNode5 = new ListNode(5);
        ListNode listNode6 = new ListNode(6);
        ListNode listNode7 = new ListNode(7);
        ListNode listNode8 = new ListNode(8);

        listNode1.next = listNode2;
        listNode2.next = listNode3;
        listNode3.next = listNode4;
        listNode4.next = listNode5;
        listNode5.next = listNode6;

        ListNode result = reverseList(listNode1);
        while (result != null) {
            System.out.println(result.val);
            result = result.next;
        }
    }

    public static ListNode reverseList(ListNode head) {
        ListNode prev = null;
        ListNode cur = head;
        while (cur != null) {
            ListNode next = cur.next;
            cur.next = prev;
            prev = cur;
            cur = next;
        }

        return prev;
    }
}

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

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

相关文章

别用==比较包装类

前两天工作把代码合并到主分支时,被公司的安全监测机制拦截了,一看是因为用了来比较Integer类型。 在阿里开发手册中,有这样一条:在包装类进行比较的时候,要用equals方法,而不是。 具体的原因下面也讲解的…

提升爬虫IP时效:解决被封IP的难题

在进行数据采集时,经常会遇到被目标网站封禁IP的情况,这给爬虫系统带来了困扰。本文将介绍如何提升爬虫IP的时效,解决被封IP的难题,帮助您顺利进行数据采集,不再受限于IP封禁。 第一步:使用爬虫IP 使用爬虫…

飞书应用机器人文件上传

背景: 接上一篇 flask_apscheduler实现定时推送飞书消息,当检查出的异常结果比较多的时候,群里会有很多推送消息,一条条检查工作量会比较大,且容易出现遗漏。   现在需要将定时任务执行的结果记录到文件,…

ESPHome不经过HA设备1直接控制设备2

目录 1.公共配置文件2.设备2:台灯3.控制器(http.post)4.获取状态(http.get) 1.公共配置文件 #wifi.yaml wifi: networks:- ssid: "123"password: "www.123.com"- ssid: "456"password: "www.123.com"# 当连接不上指定wifi,开启热点配…

idea-java: 错误: 无效的源发行版:16

1.CtrlAltShiftS 2.jdk版本对应好 3.modules中一栏sdk 4.modules中一栏源码 5.所有modules修改 6.修改项目配置 ctrlalts,修改为指定版本,应用即可

codesys【按钮】

1用于控制bool信号。 1声明全局变量 2绑定该变量 运行后,按钮就能控制这个bool变量了。 2按钮【自复位】 3按钮【锁位】

订购OV通配符SSL证书

目前很多单位申请OV通配符SSL证书,一头雾水,其实操作还是比较简单的。 订购条件OV通配符组织单位,申请之前需要确定好单位全程,并且在第三方一些主流的公共平台可以查到主体信息。 然后根据以下步骤操作就可以了: 1…

什么是API接口?给大家举例说明

Api接口也就是所谓的应用程序接口,api接口的全称是Application Program Interface,通过API接口可以实现计算机软件之间的相互通信,开发人员可以通过API接口程序开发应用程序,可以减少编写无用程序,减轻编程任务&#x…

WARNING: There was an error checking the latest version of pip.

警告:检查最新版本的pip时出错 忽略无效的分发 -ip VPN网络的提示对我非常有帮助。模块安装失败,出现上述警告,并重试连接断开警告: WARNING: There was an error checking the latest version of pip. WARNING: Retrying (Retr…

【JavaEE】_tomcat的安装与简单使用

目录 1. 安装tomcat 1.1 下载tomcat并解压缩 1.2 启动tomcat 1.3 访问tomcat欢迎页面 2. tomcat简单使用:部署前端代码 3. 基于tomcat的网站后端开发 tomcat是一个HTTP服务器,HTTP协议就是HTTP客户端与HTTP服务器之间通信使用的协议。 其中HTTP客…

编写一个应用程序,给出汉字‘你’、‘我’、‘他’在Unicode表中的位置。

(1)思路\n\n通过类型转换来显示中文的位置。 (2)代码实现 public class Place{public static void main (String args[]){char chinaWord 你;char china_Word 我;char china__Word 他;System.out.println("汉字: "ch…

OCP Java17 SE Developers 复习题04

答案 F. Line 5 does not compile. This question is checking to see whether you are paying attention to the types. numFish is an int, and 1 is an int. Therefore, we use numeric addition and get 5. The problem is that we cant store an int in a String variab…

新媒体达人投放技巧有哪些,投放总结!

达人投放,一个当今时代品牌传播跳不开的词。关于达人投放的优势与特点,相信所有人都已经不在陌生。但是真的进行达人投放时,又该如何实施,今天来分享下新媒体达人投放技巧有哪些,投放总结! 一、品牌不同阶段…

Redis分布式系统: 主从复制

“你小心保管我,不思议的念头。秘密从不会对谁泄漏~” 什么是分布式系统? 分布式系统的出现,就是为了解决单机问题(硬件资源不足)。在分布式系统中,通常会把数据复制多个副本部署到其他服务器,满⾜故障恢复和负载均衡等…

通讯网关软件020——利用CommGate X2Mysql实现Modbus TCP数据转储Mysql

本文介绍利用CommGate X2MYSQL实现从Modbus TCP设备读取数据并转储至MYSQL数据库。CommGate X2MYSQL是宁波科安网信开发的网关软件,软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示,实现从Modbus TCP设备读取数据并转储至M…

苹果ios安卓apk应用APP文件怎么修改手机APP显示的名称

修改应用名称虽然很简单,但是也是由很多喜欢代码却不是很懂代码的白白同学,所以在这里我简单的说一下具体的话还是要靠同学们自行研究,由更好的方式也可以评论区说一下哈,让俺们也学习学习。 要修改 APK 文件的应用名称&#xff…

【rust基础】基本类型、所有权与借用、复合类型

文章目录 1 基本类型1.1 数值类型1.1.1 Rust 中的内置的整数类型:1.1.2 浮点类型1.1.3 数学运算1.1.4 位运算1.1.5 序列(Range) 1.2 字符、布尔、单元类型1.3 语句和表达式1.4 函数 2 所有权与借用2.1 栈(Stack)与堆(Heap)2.2 所有权原则2.2.1 转移所有权2.2.2 克隆…

VMware安装CentOS虚拟机

1. 简介 VMware 虚拟机是一种基于虚拟化技术的软件应用程序,它允许用户在一台物理计算机上模拟多个虚拟计算环境。虚拟机提供了一个可隔离且独立于物理硬件的虚拟环境,其中可以安装和运行操作系统和应用程序。 官网地址:https://www.vmware…

IT运维管理平台助力企业打造监、管、控一体化

成立20多年业务遍及全球100多个国家和地区的某大型企业随着全球化业务快速发展,业务对信息系统运维的可用性和持续性要求随之越来越高,伴随业务发展带来的IT环境复杂度呈指数级增加,系统运维工作正面临严峻的挑战。在业务系统运行过程中&…

金融人为什么都在争先申请中国人民大学与加拿大女王大学金融硕士

“知识就是力量”,这是弗朗西斯培根的名言,也是金融行业人才追求的动力。2023年,随着金融行业的飞速发展和复杂性的增加,各企业对优秀人才的需求更加迫切。在这场激烈的人才争夺战中,越来越多的金融人选择了在职研究生…