数据结构 Java DS——链表部分经典题目 (1)

前言

笔者计划在暑假啃完JavaDS,Mysql的内容当然也会继续更

这次给读者们分享的是链表的几个比较典型的题目,关于如何手搓一个链表,笔者还在筹划中,

毕竟链表的种类也有那么多,但是在下面的题目中,只有单向链表

题目一 : 反转链表

206. 反转链表 - 力扣(LeetCode)

 很明显,想要反转一个链表,就要改变他们的地址域,具体是这样 改变的,将他们地址域的值由后一个节点的地址改为前一个节点的地址,同时注意,原head节点的 地址域应为NULL,因为反转以后,他就是最后一个节点了,因此,我们需要两个临时变量

具体写法如下

class Solution {public ListNode reverseList(ListNode head) {ListNode pre= null;ListNode cur=head;while(cur!=null){ListNode nextnode=cur.next;cur.next=pre;pre=cur;cur=nextnode;}return pre;
}
}

 具体解释如下:

cur是头节点,没什么问题,pre负责的是存储上一个节点的地址,在反转以后,head节点的地址域是空的,所以pre也就是空的

在循环中,首先定义一个临时变量存储节点原本的地址,即下一个节点的位置

然后将上一个节点的位置(pre)存在地址域,然后将pre更新为当前节点的位置,然后cur变为nextnode;

为什么不直接cur=cur.next?  因为cur.next已经被更新了,需要有一个临时变量存原本的next;

这里的题目要求返回头节点,一般来说,反转也可以这么写

   public void reverseList(){Listnode pre=null;Listnode cur=head;while(cur!=null){Listnode nextnode=cur.next;cur.next=pre;pre=cur;cur=nextnode;}this.head=pre;}

将pre设置为新的头以后,再通过display() 遍历

也可指定节点开始反转,只要把cur设置为指定节点即可; 

   public void reverseList( 指定节点 node){Listnode pre=null;Listnode cur=node;while(cur!=null){Listnode nextnode=cur.next;cur.next=pre;pre=cur;cur=nextnode;}this.head=pre;}

题目二 :移除链表元素

203. 移除链表元素 - 力扣(LeetCode)

 想要移除这些节点,就要改变他们前一个节点的地址域,也就是说,把他们的地址域改成下一个节点的,直接跳过需要删除的元素

比如我画的示意图

 代码实现如下

class Solution {public ListNode removeElements(ListNode head, int val){ListNode shaobing = new ListNode(0);shaobing.next = head;ListNode temp = shaobing;while(temp.next!=null){if(temp.next.val==val){temp.next= temp.next.next;}else{temp=temp.next;}}return shaobing.next;
}
}

这样也就搞定了

题目三: 链表的中间节点

876. 链表的中间结点 - 力扣(LeetCode)

 这个就是快慢指针的套路,快指针走两步,慢指针一步,然后找到中间节点

class Solution {public ListNode middleNode(ListNode head) {if (head == null) {return null;}ListNode slow = head;ListNode fast = head;// 快指针每次移动两步,慢指针每次移动一步while(fast!=null&& fast.next!=null){slow=slow.next;fast=fast.next.next;}return slow;}
}

 条件就是 快指针的本身不为空,以及它的下一步不能为空

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

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

相关文章

什么是 VueQuill(前端的富文本编辑器)?

什么是 VueQuill? 1. 简介 VueQuill 是 Vue.js 的一个富文本编辑器插件,它基于 Quill 编辑器构建,提供了简洁且功能强大的富文本编辑功能。Quill 是一个现代化的富文本编辑器,提供丰富的文本编辑能力,支持多种格式和…

paddlenlp cpu windows 下测试gpt

paddlenlp 安装python3.11版本 conda create -n python311 python3.11 激活python conda activate python311 安装paddlepaddle conda install paddlepaddle3.0.0b0 -c paddle pip install paddlenlp3.0.0b0 -U -i https://pypi.tuna.tsinghua.edu.cn/simple windows下…

RockYou2024 发布史上最大密码凭证

参与 CTF 的每个人都至少使用过一次臭名昭著的rockyou.txt单词表,主要是为了执行密码破解活动。 该文件是一份包含1400 万个唯一密码的列表。 源自 2009 年的 RockYou 黑客攻击,创造了计算机安全历史。 多年来,“rockyou 系列”不断发展。…

爬虫怎么实现抓取的

1.4爬虫工程师常用的库通过图1-3我们了解到,爬虫程序的完整链条包括整理需求、分析目标、发出网络请求、文本解析、数据入库和数据出库。其中与代码紧密相关的有:发出网络请求、文本解析、数据入库和数据出库,接下来我们将学习不同阶段中爬虫…

C++OCR API减轻人们文字录入的负担

曾几何时,许多大企业会设立文字录入专员的岗位。相信有不少人第一份实习工作就是录入资料,文档、发票、证件等形形色色的文件堆积如山,日积月累的敲击键盘,一张一张的录入电脑系统。这种工作是枯燥的,可以练就文字录入…

实验01 黑盒测试方法(等价类划分、边界值分析)

一 实验目的: 1、理解黑盒测试的定义; 2、掌握等价类划分法; 3、掌握边界值分析法。 二 实验环境 1、Windows操作系统计算机; 三 实验准备 1、理解黑盒测试的定义; 2、等价类划分法原则; 3、边界值分…

Java反射与Fastjson的危险反序列化

什么是Java反射? 在前文中,我们有一行代码 Computer macBookPro JSON.parseObject(preReceive,Computer.class); 这行代码是什么意思呢?看起来好像就是我们声明了一个名为 macBookPro 的 Computer 类,它由 fastjson 的 parseObje…

Java入门-Day7-面对对象基础-构造器

(1)特点 创建对象时,对象会去调用构造器 (2)应用场景 创建对象时,同时完成对对象的成员变量(属性),的初始化 (3)注意事项 //Sutdent构造器 注…

Java 幼儿园(20240709)多来源列表映射多实现类

1、功能场景 对接多个外部厂商,比如多个银行的账单获取,需要根据银行信息执行对应的实现类。 2、功能代码 (1)YAML配置来源列表 bank-source: bank_001, bank_002, bank_003 (2)外部来源枚举 public …

《梦醒蝶飞:释放Excel函数与公式的力量》10.2 COMPLEX函数

第二节 10.2 COMPLEX函数 10.2.1函数简介 COMPLEX函数是Excel中的一个工程函数,用于将实部和虚部组合成一个复数。复数广泛应用于工程、电气、物理等领域,COMPLEX函数提供了方便的复数表示和计算方法。 10.2.2语法: COMPLEX(real_num, i_…

flex 填满剩余空间

常见的flex属性值: 1.flex:1,也就是flex-grow:1,也就是上面说的自动放大填充满剩余空间,若有其他子盒子设置flex,则平分。 2.flex:0 0 auto,等同于flex:none,子元素的长度决定它的长度,当整体空间不足时,它也不会缩小&…

swift获取app网络和本地网络权限

请求蓝牙权限: //蓝牙if #available(iOS 13.1, *) {let autostate CBManager.authorizationif(autostate .notDetermined){print("")self.manager CBCentralManager(delegate: nil, queue: DispatchQueue.main,options: [CBCentralManagerOptionShowPo…

【LabVIEW学习篇 - 5】:数据类型——数值、字符串

文章目录 数值枚举下拉列表控件 字符串字符串与十六进制截取字符串连接字符串 字符串与数值间的转换字符串转为数值数值转为字符串 数值 如下图所示,各种数值型数据的不同之处在于存储和表示数据时所使用的位置不同。 浮点型 整型 在LabVIEW中,想要改…

JavaScript中的LHS和RHS

LHS和RHS之前我们先来回忆一下最简单的赋值操作! var test100; console.log(test); 以上代码的意思简单我们理解为把右边的值赋值给左边的test变量,然后输出打印结果。 可是我们要是深入理解你就会发现在这个过程当中,还发生了一些其他的事情 而这些事情就是今天…

C语言 printf函数缓冲机制

printf不立即打印到stdout的原因 printf函数使用了缓冲机制。当我们调用printf时,输出通常不会立即显示在屏幕上,而是先存储在一个缓冲区中。这是为了提高I/O操作的效率。 缓存数据输出的原理 stdio库维护了一个缓冲区。当缓冲区满了,或者在特定条件下,缓冲区的内容会被刷新…

前端如何让网页页面完美适配不同大小和分辨率屏幕

推荐使用postcss插件,它会自动将项目所有的px单位统一转换为vw等单位(包括npm安装的第三方组件),从而实现适配,具体配置规则可参考官网或npm网站介绍。 另外对于大屏的适配,需要缩放网页,可使用…

欧姆龙安全PLC及周边产品要点指南

电气安全、自动化设备作业安全,向来是非常非常之重要的!越来越多的客户在规划新产线、改造既有产线的过程中,明确要求设计方和施工方将安全考虑进整体方案中进行考虑和报价!作为一名自动化电气工程师,尤其是高级工程师…

养宠经验分享猫咪经常掉毛怎么办?最值得买的宠物空气净化器分享

身为资深铲屎官,深知若偷懒不打扫,家中便成猫毛纷飞、异味缭绕的战场,尤其换季时,更是雪上加霜。长期处于这样的环境,不仅我们头疼眼涩、咳嗽气喘,对老人、小孩、孕妇等敏感群体更是健康大敌。 幸运的是&a…

Vagrant配合VirtualBox搭建虚拟机

目录 前言一、软件下载及安装1.下载2.安装扩展: 二、创建一个虚拟机1.Vagrant官方镜像仓库 三、使用远程工具连接虚拟机1.修改相关配置文件 四、虚拟机克隆及使用1.通用配置2.简单搭建一个java环境3.克隆虚拟机1.重命名虚拟机(可选)2.打包指定…

靶场练习 手把手教你通关DC系列 DC1

DC1靶场通关教程 文章目录 DC1靶场通关教程前言一、信息收集1.主机存活2.端口收集3.网页信息收集4.目录收集4.1 Nikto4.2 Dirb 信息收集总结 二、漏洞发现与利用1. 发现2. 利用 三、FlagFlag1Flag2Flag3Flag4Flag5(提权) 前言 本次使用的kali机的IP地址为192.168.243.131 DC1的…