算法通关村第一关——链表白银挑战笔记

文章目录

    • 两个链表的第一个重合节点
    • 判断回文链表


两个链表的第一个重合节点

同LeetCode 160.相交链表
解法一:Hash和Set(集合),此处用Set合适。
把其中一个链表的所有节点引用放入set,再从头遍历另一个链表第一次重合的地方就是答案。

public ListNode getIntersectionNode(ListNode headA, ListNode headB) {Set<ListNode> set = new HashSet<>();while(headA != null){set.add(headA);headA = headA.next;}while(headB != null){if(set.contains(headB)) return headB;headB = headB.next;}return null;
}

解法二:使用栈
两个链表都分别入栈,出栈的时候判断最后一个相同引用。

public ListNode getIntersectionNode(ListNode headA, ListNode headB) {Stack<ListNode> stackA = new Stack<>();Stack<ListNode> stackB = new Stack<>();while (headA != null) {stackA.push(headA);headA = headA.next;}while (headB != null) {stackB.push(headB);headB = headB.next;}ListNode cur = null;while (!stackA.isEmpty() && !stackB.isEmpty()) {if (stackA.peek() == stackB.peek()) {cur = stackA.pop();stackB.pop();} else break;}return cur;
}

前两种解法利用了数据结构的特点,下面两种则是将两个链表的长度设法弄成一样的,之后节点映射对比。


解法三:拼接
如图AB两个链表如果有重合部分,则可以把AB链表分成 left 和 right 部分,易知 right_a = right_b 。将AB两个链表按照AB、BA两种方式拼接得到的结果可以看到有重合部分,这样两个链表长度相等,则可以映射对比。
在这里插入图片描述
在这里插入图片描述

public ListNode getIntersectionNode(ListNode headA, ListNode headB) {if(headA==null || headB==null) return null;ListNode node1 = headA;ListNode node2 = headB;while (node1 != node2){node1 = node1.next;node2 = node2.next;if(node1 == node2) break;// 因为两个合并链表长度一定相等,也就是说遍历完合并链表一定能得到答案。这个判断是对AB链表无交集情况的判断,防止死循环。if (node1!=node2) { if(node1==null) node1 = headB;if(node2==null) node2 = headA;}}return node1;}

解法四:消余
同思路三都是让链表长度相等再遍历。这个方法就是让长的链表遍历到和短链表长度相等时比较。

public ListNode getIntersectionNode(ListNode headA, ListNode headB) {if(headA==null || headB==null) return null;ListNode node1 = headA;ListNode node2 = headB;int l1 = 0, l2 = 0;while (node1!=null){l1++;node1 = node1.next;}while (node2!=null){l2++;node2 = node2.next;}int l = Math.abs(l1-l2);if(l1>l2){while (l!=0){headA = headA.next;l--;}}else {while (l!=0){headB = headB.next;l--;}}while (headA!=headB){headA = headA.next;headB = headB.next;}return headA;
}

判断回文链表

同LeetCode 234.回文链表
解法一:入栈对比。

ublic boolean isPalindrome(ListNode head) {Stack<ListNode> stack = new Stack<>();ListNode cur = head;int l = 0;// 将全部元素入栈while (cur != null){stack.push(cur);cur = cur.next;l++;}// 比价一半长度即可l /= 2;while (l!=0) {if(head.val != stack.pop().val) return false;head = head.next;l--;}return true;
}

解法二:翻转链表。
使用快慢指针遍历(也可以遍历求长度,然后遍历到链表的中间),然后翻转链表后半部分,再与原链表对比。

public boolean isPalindrome(ListNode head) {ListNode slow = head;ListNode fast = head;while (fast!=null && fast.next!=null){fast = fast.next.next;slow = slow.next;}fast = reverse(slow);while (fast!=null){if(fast.val!= head.val) return false;fast = fast.next;head = head.next;}return true;
}private ListNode reverse(ListNode head) {ListNode cur = head.next;head.next = null;while (cur!=null){ListNode curNext = cur.next;cur.next = head;head = cur;cur = curNext;}return head;
}

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

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

相关文章

Android性能优化之SharedPreference卡顿优化

下面的源码都是基于Android api 31 1、SharedPreference使用 val sharePref getPreferences(Context.MODE_PRIVATE) with(sharePref.edit()) { putBoolean("isLogin", true)putInt("age", 18)apply() } val isLogin sharePref.getBoolean("isLogi…

windows环境下docker数据迁移到其他盘

docker安装在C盘&#xff0c;使用一段时间后&#xff0c;C盘爆满。因此想把C盘中的数据迁移到其他盘&#xff0c;以释放C盘空间。分为以下步骤&#xff1a; 1、启动docker软件&#xff0c;打开PowerShell并切换到Docker Compose配置文件的目录。 Docker Compose配置文件的目录…

通过社区参与解锁早期增长:Maven 远程医疗平台概览

Maven通过用户导向的渐进式验证&#xff0c;找到了一个被忽视的巨大女性医疗服务市场&#xff0c;作为女性医疗保健的先行者&#xff0c;已服务超过1500万用户&#xff0c;目前估值已达$14亿。本文将深入探索Maven实现产品市场匹配的三个阶段&#xff0c;从如何验证初始的市场机…

Vue2基础十、Vuex

零、文章目录 Vue2基础十、Vuex 1、vuex概述 &#xff08;1&#xff09;vuex是什么 vuex 是一个 vue 的 状态管理工具&#xff0c;状态就是数据。大白话&#xff1a;vuex 是一个插件&#xff0c;可以帮我们管理 vue 通用的数据 (多组件共享的数据) 例如&#xff1a;购物车数…

Linux安装部署Nacos和sentinel

1.将nacos安装包下载到本地后上传到linux中 2.进入nacos的/bin目录,输入命令启动nacos [rootlocalhost bin]# sh startup.sh -m standalone注:使用第二种方式启动,同时增加日志记录的功能 2.2 startup.sh文件是不具备足够的权限,否则不能操作 给文件赋予执行权限 [rootlocalh…

【lesson5】linux vim介绍及使用

文章目录 vim的基本介绍vim的基本操作vim常见的命令命令模式下的命令yypnyynpuctrlrGggnG$^wbh,j,k,lddnddnddp~shiftrrnrxnx 底行模式下的命令set nuset nonuvs 源文件wq!command&#xff08;命令&#xff09; vim配置解决无法使用sudo问题 vim的基本介绍 首先vim是linux下的…

十、数据结构——链式队列

数据结构中的链式队列 目录 一、链式队列的定义 二、链式队列的实现 三、链式队列的基本操作 ①初始化 ②判空 ③入队 ④出队 ⑤获取长度 ⑥打印 四、循环队列的应用 五、总结 六、全部代码 七、结果 在数据结构中&#xff0c;队列&#xff08;Queue&#xff09;是一种常见…

react-router-dom和react-router的区别

react-router-dom和react-router的区别 前言 在使用react-router-dom的时候&#xff0c;经常会和react-router搞混了&#xff0c;搞不清楚它们哪个跟哪&#xff0c;到底有什么关系&#xff0c;今天来总结一下。 结论 react-router-dom是在react-router的基础上开发的&#…

变现:利用 chatgpt + midjourney 制作微信表情包

1、利用gpt生成提示词&#xff0c;当然也可以直接翻译 生成基础提示词&#xff0c; 比如&#xff1a; an anime image with a white kawaii character in it, in the style of light green and brown, minimalist detail, animated gifs, cranberrycore, 1860–1969, babyco…

C#实现数字验证码

开发环境&#xff1a;VS2019&#xff0c;.NET Core 3.1&#xff0c;ASP.NET Core API 1、建立一个验证码控制器 新建两个方法Create和Check&#xff0c;Create用于创建验证码&#xff0c;Check用于验证它是否有效。 声明一个静态类变量存放列表&#xff0c;列表中存放包含令…

python selenium爬虫自动登录实例

拷贝地址&#xff1a;python selenium爬虫自动登录实例_python selenium登录_Ustiniano的博客-CSDN博客 一、概述 我们要先安装selenium这个库&#xff0c;使用pip install selenium 命令安装&#xff0c;selenium这个库相当于机器模仿人的行为去点击浏览器上的元素&#xff0…

Android ANR触发机制之Service ANR

一、前言 在Service组件StartService()方式启动流程分析文章中&#xff0c;针对Context#startService()启动Service流程分析了源码&#xff0c;其实关于Service启动还有一个比较重要的点是Service启动的ANR&#xff0c;因为因为线上出现了上百例的"executing service &quo…

R-并行计算

本文介绍在计算机多核上通过parallel包进行并行计算。 并行计算运算步骤&#xff1a; 加载并行计算包&#xff0c;如library(parallel)。创建几个“workers”,通常一个workers一个核&#xff08;core&#xff09;&#xff1b;这些workers什么都不知道&#xff0c;它们的全局环…

c++学习(位图)[22]

位图 位图&#xff08;Bitmap&#xff09;是一种数据结构&#xff0c;用于表示一个固定范围的布尔值&#xff08;通常是0或1&#xff09;。它使用一个二进制位来表示一个布尔值&#xff0c;其中每个位的值表示对应位置的元素是否存在或满足某种条件。 位图可以用于解决一些特…

利用MATLAB制作DEM山体阴影

在地理绘图中&#xff0c;我们使用的DEM数据添加山体阴影使得绘制的图件显得更加的美观。 GIS中使用ArcGIS软件就可以达到这一目的&#xff0c;或者使用GMT&#xff0c;同样可以得到山体阴影的效果。 本文提供了一个MATLAB的函数&#xff0c;可以得到山体阴影。 clear all;c…

《面试1v1》如何能从Kafka得到准确的信息

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

安防视频管理平台GB设备接入EasyCVR, 如何获取RTMP与RTSP视频流

安防视频监控平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&#xff0c;比…

基于粒子群优化算法的分布式电源选址与定容【多目标优化】【IEEE33节点】(Matlab代码实现)

目录 &#x1f4a5;1 概述 1.1 目标函数 2.2 约束条件 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码实现 &#x1f4a5;1 概述 分布式电源接入配电网&#xff0c;实现就地消纳&#xff0c;可以提高新能源的利用率、提高电能质量和降低系统网损…

出海周报|Temu在美状告shein、ChatGPT安卓版上线、小红书回应闪退

工程机械产业“出海”成绩喜人&#xff0c;山东相关企业全国最多Temu在美状告shein&#xff0c;跨境电商战事升级TikTok将在美国推出电子商务计划&#xff0c;售卖中国商品高德即将上线国际图服务&#xff0c;初期即可覆盖全球超200个国家和地区ChatGPT安卓版正式上线&#xff…

echarts遇到的问题

文章目录 折线图-区域面积图 areaStyley轴只有整数y轴不从0开始y轴数值不确定&#xff0c;有大有小&#xff0c;需要动态处理折线-显示label标线legend的格式化和默认选中状态x轴的lable超长处理x轴的相关设置 echarts各个场景遇到的问题 折线图-区域面积图 areaStyle areaStyl…