算法训练营Day4(链表)

语言

采用的Java语言,一些分析也是用于Java,请注意。

 24. 两两交换链表中的节点 

24. 两两交换链表中的节点 - 力扣(LeetCode)

解题

这道题就是考验链表的基础操作,但是有个语言方面的知识需要去掌握,就是||  |  &&  &的这几个的区别,对于这道题影响还是比较大的,我看好多人在问这个

class Solution {public ListNode swapPairs(ListNode head) {ListNode dummy = new ListNode(0,head);ListNode cur = dummy;//dummy 1 2 3 4 5while(cur.next!=null&&cur.next.next!=null){ListNode temp1 = cur.next;//1ListNode temp2 = cur.next.next.next;//3cur.next = cur.next.next;//2cur.next.next=temp1;temp1.next=temp2;cur=cur.next.next;}return dummy.next;}
}

这里说一下:

解释为什么用&&和空指针问题

这里为什么用&&:(cur.next!=null && cur.next.next !=null)
1、说明了当奇数节点的时候,比如指向4 后面还有个5的时候,cur.next!=null ,但是cur.next.next==null,第二个不满足条件,就不会在做循环里的反转,若是||的时候,就会把5也给做判断,但实际上是不需要判断的
2、当偶数个节点的时候,4 后面没有5,那么cur.next==null不满足第一个条件,直接就会结束
3、注意&&和&的区别,&&的时候,第一个不成立,下一个就不会执行,所以说,cur.next==null了,cur.next.next就不会执行,不用考虑空指针的问题,所以这两个的位置不能交换

19.删除链表的倒数第N个节点 

19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

这到题就注意一下先走n+1步,慢节点就可以倒删除元素的前一个

比如

1   2    3

倒数1个节点

fast=2(1+1) slow=1

fast=3 slow =2

fast=null 循环停止,此时slow=2

slow.next = slow.next.next就把3删掉。

class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode dummy = new ListNode(0,head);ListNode fast = dummy;ListNode slow = dummy;//多走1步,slow就会在上一个节点n++;while(n-->0){fast=fast.next;}while(fast!=null){fast=fast.next;slow=slow.next;}slow.next=slow.next.next;return dummy.next;}
}

 面试题 02.07. 链表相交 

这道题就是让长的链表先移动几个距离,和短的链表保持一样,然后一起移动就可以了,并没有什么难度。

public ListNode getIntersectionNode(ListNode headA, ListNode headB) {int lenA=0;int lenB=0;ListNode curA=headA;ListNode curB=headB;while(curA!=null){lenA++;curA=curA.next;}while(curB!=null){lenB++;curB=curB.next;}ListNode shortLen=null;ListNode longLen = null;if(lenA<lenB){shortLen=headA;longLen=headB;}else {shortLen=headB;longLen=headA;}int len= lenA>lenB?lenA-lenB:lenB-lenA;while (len-->0){longLen=longLen.next;}while(shortLen!=null&&longLen!=null){if(shortLen==longLen){return shortLen;}shortLen=shortLen.next;longLen=longLen.next;}return null;}

 142.环形链表II 

142. 环形链表 II - 力扣(LeetCode)

这道题呢,就是判断链表有环和找到入环的位置,主要难理解一个为什么slow指针被追上的时候肯定没到1圈,通俗的一句话就是,你在操场跑步,我是你的二倍速,那么你跑一圈,我肯定跑完两圈了,之间肯定会有交点。

还有就是为什么会相遇,这个更简单了,入环的之后,两者的相对速度是1,相当于走一次,距离就近了一次,肯定会相遇

public class Solution {public ListNode detectCycle(ListNode head) {ListNode slow = head;ListNode fast = head;while(fast!=null&&fast.next!=null){slow = slow.next;fast = fast.next.next;if(slow==fast){ListNode head1 = head;while(slow!=head1){head1 = head1.next;slow = slow.next;}return head1;}}return null;}
}

总结(重点!!卡哥遗漏)

链表总结的话,主要就是虚拟头节点使用,然后就是一些边界处理这里一定要注意,需要有自己的总结,比如说这篇文章24题,我强调的&&号的使用在这道题的意义,这个是需要着重理解的。

以及&&号使用之后,需要注意while循环里的条件是否需要注意空指针的问题,比如24题中,

1 2 3 4 

cur是4 ,cur.next为null,那么因为&&,后面是不会再去判断的,

因为&&,前面是否,那么直接结束循环了,因此不会有空指针的问题,但是cur.next.next放前面就会了,这是值得注意的

 1 2 3 4 5

cur是4,cur.next不为null,接着才会处理cur.next.next发现为null,也跳出循环,符合我们的要求,这也是视频中很多人在问| |号行不行,我在这里解释一下!。

另外,对于类似的这样问题,我在Day3也有做阐述,可以去关注,将在文章末尾去做。可能看的时候还没做,我需要时间分析思考,关注即可。

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

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

相关文章

TCP通信

第二十一章 网络通信 本章节主要讲解的是TCP和UDP两种通信方式它们都有着自己的优点和缺点 这两种通讯方式不通的地方就是TCP是一对一通信 UDP是一对多的通信方式 接下来会一一讲解 TCP通信 TCP通信方式呢 主要的通讯方式是一对一的通讯方式&#xff0c;也有着优点和缺点…

如何在Android平板上远程连接Ubuntu服务器使用code-server代码开发

目录 1.ubuntu本地安装code-server 2. 安装cpolar内网穿透 3. 创建隧道映射本地端口 4. 安卓平板测试访问 5.固定域名公网地址 6.结语 1.ubuntu本地安装code-server 准备一台虚拟机,Ubuntu或者centos都可以&#xff0c;这里以VMwhere ubuntu系统为例 下载code server服务…

el-table 表格多选(后端接口搜索分页)实现已选中的记忆功能。实现表格数据和已选数据(前端分页)动态同步更新。

实现效果&#xff1a;&#xff08;可拉代码下来看&#xff1a;vue-demo: vueDemo&#xff09; 左侧表格为点击查询调用接口查询出来的数据&#xff0c;右侧表格为左侧表格所有选择的数据&#xff0c;由前端实现分页。 两个el-table勾选数据联动更新 实现逻辑&#xff1a; el-…

低代码开发到底是补品还是垃圾食品?

2023&#xff0c;低代码彻底火了&#xff0c;甚至火到没有点相关经验&#xff0c;都不好意思出去面试的程度。 从业者对低代码的发展充满了想象&#xff0c;都认为未来低代码的商业价值不可估量。 据Gartner的最新报告显示&#xff0c;2023年全球低代码开发技术市场规模预计将…

内部文件上传以及渲染-接口API

文件上传 地址http://172.16.0.118:8090/api/pm/base/affix/upload请求类型POSTContent-Type:text/plain;charsetutf-8参数 prjData {"prjId":"", "jobId":"3031b2c8-c809-4110-8e88-22c80a9c1ec0721aca89-96a1-4346-9b6e-022331d221d1Nec…

【EMNLP 2023】面向Stable Diffusion的自动Prompt工程算法BeautifulPrompt

近日&#xff0c;阿里云人工智能平台PAI与华南理工大学朱金辉教授团队合作在自然语言处理顶级会议EMNLP2023上发表了BeautifulPrompt的深度生成模型&#xff0c;可以从简单的图片描述中生成高质量的提示词&#xff0c;从而使文生图模型能够生成更美观的图像。BeautifulPrompt通…

【MATLAB】MODWT分解+FFT+HHT组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 MODWT分解FFTHHT组合算法是一种综合性的信号处理方法&#xff0c;它结合了经验小波变换&#xff08;Empirical Wavelet Transform&#xff0c;EWT&#xff09;、快速傅里叶变换&#xff…

25.Oracle的回收站

oracle基础系统学习目录 01.CentOS7静默安装oracle11g 02.Oracle的启动过程 03.从简单的sql开始 04.Oracle的体系架构 05.Oracle数据库对象 06.Oracle数据备份与恢复 07.用户和权限管理 08.Oracle的表 09.Oracle表的分区 10.Oracle的同义词与序列 11.Oracle的视图 12.Oracle的…

爱智EdgerOS之深入解析如何应用爱智的视频流模块完成拉流

一、ONVIF 规范和常见视频流传输协议 ① ONVIF 规范 随着视频监控产业链的成熟&#xff0c;市面上陆陆续续出现了各式各样的网络摄像设备&#xff0c;这些设备都需要通讯协议才能进行数据传输。早期厂商都采用私有协议&#xff0c;但是现在厂商分工明确&#xff0c;有的负责生…

程序员的技术成长攻略

推荐语&#xff1a;偶尔在公众号看到的一篇文章&#xff0c;写的非常好&#xff0c;在此分享给各位程序员兄弟&#xff0c;不光是对技术成长有帮助&#xff0c;其他领域也是同样适用的&#xff01;建议反复阅读&#xff0c;形成一套自己的技术成长策略。 原文地址&#xff1a;…

数据结构与算法:python栈和队列的用法

python的栈和队列其实都算作一个数组&#xff0c;栈从最后一个元素开始推出&#xff0c;队列从第一个元素开始推出 # pop(0)删除时间复杂度O(n) s [] #栈 q [] #队列 s.append(1)#1入栈 q.append(1)#1入队 s.pop()#出栈 q.pop(0)#出队由于从第一个元素删除需要挪动数组&…

【EI会议征稿】2024年粤港澳大湾区数字经济与人工智能国际学术会议(DEAI2024)

2024年粤港澳大湾区数字经济与人工智能国际学术会议(DEAI2024) 2024 Guangdong-Hong Kong-Macao Greater Bay Area International Conference on Digital Economy and Artificial Intelligence(DEAI2024) 2024年粤港澳大湾区数字经济与人工智能国际学术会议(DEAI2024)由广东科…

探索鸿蒙 TextInput组件

TextInput 根据组件名字&#xff0c;可以得知他是一个文本输出框。 声明代码&#x1f447; TextInput({placeholder?:ResourceStr,text?:ResourceStr}); placeholder: 就是提示文本&#xff0c;跟网页开发中的placeholder一样的 text&#xff1a;输入框当前的文本内容 特殊属…

ChatGPT的进化史

真正的人工智能可以变现的完全与人类一样思考时&#xff0c;世界会发生什么变化&#xff1f; ChatGPT就如它的名字一样&#xff0c;人类创造它最初的目的只是一个聊天机器人。聊天嘛&#xff0c;只要你和他对话时他的回答像人类一样自然就行了&#xff0c;看起来并没什么了不起…

Linux服务器磁盘占用过高解决思路

服务器在运行时&#xff0c;经常出现磁盘占用过高&#xff0c;可能有如下原因&#xff1a; 1、是否有产生过大的日志文件&#xff0c;或者大文件中的log过大&#xff0c;导致磁盘占用过高&#xff1b; 2、查看磁盘占用情况&#xff0c;分析哪个目录中文件占比最大&#xff1b; …

贝蒂的捣蛋小游戏~(C语言)

引言&#xff1a; 前面贝蒂已经给大家介绍了选择&#xff0c;循环结构~&#xff0c;今天贝蒂就基于这两种结构&#xff0c;为大家讲解一种捣蛋小游戏的设计思路和方法哦。 1.游戏要求 游戏要求&#xff1a; 1. 电脑⾃动⽣成1~100的随机数 2. 玩家猜数字&#xff0c;猜数字的过…

52 代码审计-PHP项目类RCE及文件包含下载删除

目录 漏洞关键字:演示案例:xhcms-无框架-文件包含跨站-搜索或应用-includeearmusic-无框架-文件下载-搜索或应用功能-down等zzzcms-无框架-文件删除RCE-搜索或应用-unlink、eval 漏洞关键字: SQL注入&#xff1a; select insert update mysql_query mysql等 文件上传&#xff…

【FreeRTOS】信号量——简介、常用API函数、注意事项、项目实现

在FreeRTOS中&#xff0c;信号量是一种非常重要的同步机制&#xff0c;用于实现任务间的互斥访问和同步操作。通过信号量&#xff0c;不同的任务可以安全地共享资源&#xff0c;避免竞争和冲突&#xff0c;从而确保系统的稳定性和可靠性。本篇博客将介绍FreeRTOS中信号量的基本…

常用Nmap脚本

端口扫描类脚本 Nmap是一款非常流行的端口扫描工具&#xff0c;它可以帮助渗透测试工程师识别目标网络上开放的端口&#xff0c;并提供有关这些端口的详细信息。Nmap还提供了一系列基于脚本的功能&#xff0c;这些脚本可以扩展Nmap的功能&#xff0c;使其能够更深入地探测目标网…

使用Huggingface创建大语言模型RLHF训练流程的完整教程

ChatGPT已经成为家喻户晓的名字&#xff0c;而大语言模型在ChatGPT刺激下也得到了快速发展&#xff0c;这使得我们可以基于这些技术来改进我们的业务。 但是大语言模型像所有机器/深度学习模型一样&#xff0c;从数据中学习。因此也会有garbage in garbage out的规则。也就是说…