编程导航算法村第二关 | 白银挑战

编程导航算法村第二关 | 白银挑战

指定区间的链表翻转

  • LeetCode92 :给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right。请你反转从位置 left 到位置 right 的链表节点,返回反转后的链表。
public ListNode reverseBetween(ListNode head, int left, int right) {
//        确定翻转列表的左起始节点ListNode domo = new ListNode(0);domo.next = head;
//        System.out.println(head);int i = 0;ListNode temp = domo;while (i < left - 1) {temp = temp.next;i++;}
//        System.out.println(temp.val);        保存前一个ListNode preNode = temp;ListNode leftNode = temp.next;        确定翻转列表的右结束节点i = 0;while (i < (right - left + 1)) {temp = temp.next;i++;}
//

        保存它的后一个ListNode rightNode = temp;ListNode afterNode = temp.next;preNode.next = null;rightNode.next = null;//        翻转指定区间列表temp = leftNode;ListNode pre = null;ListNode cul = leftNode;while (cul != null) {ListNode next = cul.next;cul.next = pre;pre = cul;cul = next;
//            temp = temp.next;}
//        System.out.println(rightNode.next.val);preNode.next = rightNode;leftNode.next = afterNode;return domo.next;}

两两交换链表

LeetCode24 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题

public ListNode swapPairs(ListNode head) {
//    设置虚拟头结点ListNode node = new ListNode(0);node.next = head;ListNode temp = node;
//        遍历到倒数第三个为止while (temp.next != null && temp.next.next != null) {ListNode n = temp.next.next;temp.next.next = n.next;n.next = temp.next;temp.next = n;temp = temp.next.next;}return node.next;}

实现单链表的+1

  • 在此处,我们采取的思路是,现将链表进行翻转,然后给第一个节点+1,保存进位值,往后的节点与进位值相加
  • 注意:我们需要考虑当遍历到最后一个元素还有进位的情况即999,这种情况,我们需要新建一个节点,插入到链表末尾
  • 再次翻转元素
/*** 实现单链表所有元素+1的操作*/public static ListNode addOne(ListNode head) {if (head == null) {return null;}ListNode pre = reverse(head);ListNode temp = pre;int cut = 0; //进位
//        现将第一个元素添加了进位int sum = 0;sum = temp.val + 1;if (sum >= 10) {temp.val = sum % 10;cut = 1;} else {cut = 0;temp.val = sum;}temp = temp.next;while (temp != null) {sum = temp.val + cut;if (sum >= 10) {temp.val = sum % 10;cut = sum / 10;} else {temp.val = sum;cut = 0;}
//            到了最后一个,如果是最后一个还有进位,说明需要添加一位数if (temp.next == null) {if (cut == 1) {ListNode listNode = new ListNode(1);temp.next = listNode;break;}}temp = temp.next;}return reverse(pre);}/*** 定义翻转的函数*/public static ListNode reverse(ListNode head) {ListNode pre = null;ListNode cur = head;
//while (cur != null) {ListNode temp = cur.next;cur.next = pre;pre = cur;cur = temp;}return pre;}

链表加法

  • 现将两个待相加的链表翻转,然后进行相加
  • 分两种情况
    • 位数相同
    • 位数不同
 public ListNode addTwoNumbers(ListNode l1, ListNode l2) {if (l1 == null || l2 == null) {return null;}//         先翻转链表ListNode nl1 = reverse(l1);ListNode nl2 = reverse(l2);ListNode result = new ListNode(0);ListNode temp = result;int cul = 0;int sum = 0;
//                现将相同的位数进行相加while (nl1 != null && nl2 != null) {sum = nl1.val + nl2.val + cul;if (sum >= 10) {cul = 1;sum = sum % 10;} else {cul = 0;}ListNode node = new ListNode(sum);temp.next = node;temp = temp.next;nl1 = nl1.next;nl2 = nl2.next;//            考虑两者位数一样,同时到达末尾if (nl1 == null && nl2 == null) {if (cul != 0) {node = new ListNode(cul);temp.next = node;}}}//if (nl1 != null) {while (nl1 != null) {sum = nl1.val + cul;if (sum >= 10) {cul = sum / 10;sum = sum % 10;} else {cul = 0;}temp.next = new ListNode(sum);temp = temp.next;nl1 = nl1.next;if (nl1 == null && cul != 0) {temp.next = new ListNode(1);break;}}}if (nl2 != null) {while (nl2 != null) {sum = nl2.val + cul;if (sum >= 10) {cul = sum / 10;sum = sum % 10;} else {cul = 0;}temp.next = new ListNode(sum);temp = temp.next;nl2 = nl2.next;if (nl2 == null && cul != 0) {temp.next = new ListNode(1);break;}}}return reverse(result.next);}

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

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

相关文章

第四次CCF计算机软件能力认证

第一题&#xff1a;图像旋转 旋转是图像处理的基本操作&#xff0c;在这个问题中&#xff0c;你需要将一个图像逆时针旋转 90 度。 计算机中的图像表示可以用一个矩阵来表示&#xff0c;为了旋转一个图像&#xff0c;只需要将对应的矩阵旋转即可。 输入格式 输入的第一行包含两…

我国版式文档格式OFD前端WEB展示之EasyOFD

EasyOFD an ofd file web shower 一个在web端展示ofd文件的控件&#xff0c;该控件基于CANVAS绘制。 该控件使用了以下外部程序 1&#xff09;jszip&#xff1a;解决解压文件。 2&#xff09;x2js: 解决XML文件到JS转换 3&#xff09;easyjbig2: 解决ofd内部使用jb2文件存储的…

NSSCTF刷web(2)

[NISACTF 2022]bingdundun~ bingdundun处感觉像文件包含,改upload为index 发现确实,猜测会补一个后缀.php 那常规文件包含都不行了,这里还有一个文件上传的功能,考虑phar协议 <?php$phar new Phar("test.phar"); $phar->startBuffering(); $phar->setStu…

小马识途分享百度百科收录词条的规则

百度百科词条是人人都可以编辑的&#xff0c;并且都是免费创建&#xff0c;但是自己创建百科词条往往审核不通过&#xff0c;一般企业会把这项任务委托给有经验的营销团队。这里小马识途营销顾问分享一下百度百科收录词条的规则。 百度百科收录规则主要分为&#xff1a;规范词条…

【excel细碎小知识点】

目录索引 &符号的用法&#xff1a;实例演示&#xff1a; 数字显示和位数的区别&#xff1a;分列功能的妙用&#xff1a;什么叫做常规类型&#xff1a; &符号的用法&#xff1a; **连接字符串:**转化后都是文本字符串类型。你可以通过修改数据类型进行更多可能的操作 实…

【Go语言开发】简单了解一下搜索引擎并用go写一个demo

写在前面 这篇文章我们一起来了解一下搜索引擎的原理&#xff0c;以及用go写一个小demo来体验一下搜索引擎。 简介 搜索引擎一般简化为三个步骤 爬虫&#xff1a;爬取数据源&#xff0c;用做搜索数据支持。索引&#xff1a;根据爬虫爬取到的数据进行索引的建立。排序&#xf…

prometheus调整默认数据存储时间

调整kubernetes部署的prometheus数据存储时间 由于prometheus是用kuberentes部署的&#xff0c;没办法像传统部署方式那种直接在启动参数增加存储时间的参数。需要在configmap里或者在deployment里添加&#xff0c;我这里使用的方式是在deployement里添加调整存储时间的参数。…

学会在重装系统前如何备份软件,再也不怕失去珍贵的应用!

​Windows系统是电脑的重要组成部分&#xff0c;它不仅提供了友好的用户界面&#xff0c;还承担着许多关键的功能和任务&#xff0c;为我们提供了一个稳定、安全和效率的工作环境&#xff0c;使我们能够充分发挥电脑的潜力&#xff0c;优化工作效率和生活品质。 随着系统使…

为 GitHub 设置 SSH 密钥

1. 起因 给自己的 github 改个名&#xff0c;顺便就给原来 Hexo 对应的仓库也改了个名。然后发现 ubhexo clean && hexo generate && hexo deploy 失败了&#xff0c;报错如下&#xff1a; INFO Deploying: git INFO Clearing .deploy_git folder... INFO …

软件渗透测试真的很重要吗?渗透测试有哪些测试流程?

软件渗透测试是指通过模拟恶意攻击者的行为&#xff0c;评估软件系统中的潜在安全漏洞和弱点的活动。这种安全测试方法能够帮助开发人员和系统管理员发现并修复潜在的安全漏洞&#xff0c;以确保软件系统的安全性和完整性。软件渗透测试是一项高度技术性的任务&#xff0c;需要…

javaee jsp页面 九大内置对象和四大作用域

九大内置对象四大域 一、四大域 域对象的作用:保存数据,获取数据,共享数据 作用域从小到大为&#xff1a;PageContext&#xff08;jsp页面&#xff09;&#xff0c;ServletRequest&#xff08;一次请求&#xff09;&#xff0c;HttpSession&#xff08;一次会话&#xff09;&am…

如何使用MATLAB软件完成生态碳汇涡度相关监测与通量数据分析

MATLAB MATLAB是美国MathWorks公司出品的商业数学软件&#xff0c;用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人&#xff0c;控制系统等领域。 [1] MATLAB是matrix&laboratory两个词的组合&#xff0c;意为矩阵工厂&a…

postgresql导入导出数据库的一些问题

新建一个数据库 别忘了添加空间数据的扩展 备份之前的数据库 注意一定要自定义表&#xff0c;去掉 spatial_ref_sys &#xff0c;要不然需要先drop在创建&#xff0c;可能会报错。 一般不会去导函数&#xff0c;如果有个别自己创建的函数可以手动复制一下&#xff0c;全部导的话…

Centos 7 使用国内镜像源更新内核

内核选择参考 此博文 &#xff1a;https://blog.csdn.net/alwaysbefine/article/details/108931626 elrepo官网介绍的内核升级方式为&#xff1a; 一、按文档执行引入 elrepo库&#xff1b; # 1、引入公钥 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org# 2、安…

微服务系列文章 之 Nginx服务状态监控的方法

在Nginx的插件模块中有一个模块stub_status可以监控Nginx的一些状态信息&#xff0c;默认安装可能没有这个模块&#xff0c;手动编译的时候加一下即可。 1. 模块安装 先使用命令查看是否已经安装这个模块&#xff1a; [rootihxb123Z nginx]# ./nginx -V (V大写会显示版本号和…

sql练习题

DQL练习1-学生表 创建如下学生表 create table student( id int, name varchar(20), gender varchar(20), chinese int, math int, english int ); insert into student values (1,张明,男,89,78,90), (2,李进,男…

系统学习Linux-SSH远程服务(二)

概念 安全外壳协议&#xff0c;提供安全可靠的远程连接 特点 ssh是工作在传输层和应用层的协议 ssh提供了一组管理命令 ssh 远程登陆 scp 远程拷贝 sftp 远程上传下载 ssh-copy-id ssh keygen 生成 提供了多种身份验证机制 身份验证机制 密码验证 需要提供密码 密…

pyGPlates + GPlately + PlateTectonicTools——深时时空数据分析

pyGPlates GPlately PlateTectonicTools——深时时空数据分析 摘要介绍准备example 1&#xff1a;通过DataServer对象从EarthByte serves上获取板块模型 板块重建 资料来源备注&#xff1a; gplately API文档 摘要 GPlates作为桌面图形用户界面应用&#xff0c;可用于深时地…

计算机网络 day6 arp病毒 - ICMP协议 - ping命令 - Linux手工配置IP地址

目录 arp协议 arp病毒\欺骗 arp病毒的运行原理 arp病毒产生的后果&#xff1a; 解决方法&#xff1a; ICMP协议 ICMP用在哪里&#xff1f; ICMP协议数据的封装过程 ​编辑 为什么icmp协议封装好数据后&#xff0c;还要加一个ip包头&#xff0c;再使用ip协议再次进…

【ArcGIS Pro二次开发】(50):布局(Layout)的基本操作

ArcGIS Pro SDK中的布局(Layout)是用于创建和编辑打印布局的一组功能。 Layout是打印布局的容器&#xff0c;它可以包含多个元素&#xff0c;例如地图框、文本框、图例、比例尺等。 Layout中包含多种元素&#xff0c;比较重要的有&#xff1a;地图(MapFrameElement&#xff0…