[LeetCode]求两个链表的焦点--Intersection of Two Linked Lists
2024-10-19 23:56:00
1.解题意
求解两个链表的焦点,这个交点并不是焦点的值相等,而是需要交点之后的数据是完全相等的。
落实到java层面,就是交点处的对象是同一个对象即可。
ps:我最开始没有读懂题目,然后就开始比较节点的值是否相等,直到示例跑失败了才知道原因。
2.通用解法
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if(headA!=null && headB!=null){
ListNode tempA=headA;
ListNode tempB=headB;
while(tempA!=null){
while(tempB!=null){
if(tempA==tempB){
return tempA;
}
tempB=tempB.next;
}
tempB=headB;
tempA=tempA.next;
}
}
return null;
}
这里通过双循环的方式来遍历每一个节点,如果节点是同一个对象即可返回,这是我们正常的思维。
接下来的结果就打脸了:时间复杂度|空间复杂度 超过5%的解法。
哎,还是读题的问题,题目要求了时间复杂度是 O(n),空间复杂度是O(1);那么应该是有更优解的。
3.更优解
首先,假定存在交点,交点之后的链表长度是 c,链表A在交点之前的长度是a,链表B在交点之前的长度是b;
A的长度是 a+c;B的长度是 b+c
如果我们让两边相等,即把长度变成是 a+b+c,那么链表A的最后一个节点是链表B交点之前的节点,即下一个节点就是交点;同理链表B的最后一个节点的下一个节点就是交点;
这样,我们可以只遍历一次,就可以找到交点,最大的长度是 a+b+c+1,即可找到交点;
代码如下:
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode l1 = headA, l2 = headB;
int finishA = 0;
boolean finishB = false;
while (l1 != l2 && finishA<3) {
if(l1==null){
finishA++;
}
if(l2==null){
finishA++;
}
l1 = (l1 == null) ? headB : l1.next;
l2 = (l2 == null) ? headA : l2.next;
}
return finishA>=3?null:l1; // 修改当无交点时的死循环
}
参考:https://cyc2018.github.io/CS-Notes/#/notes/Leetcode 题解 - 链表
最新文章
- Write on &hellip;&hellip;&hellip; failed: 112(failed to retrieve text for this error. Reason: 15105)
- GP服务将矢量数据加入到栅格数据中的方法
- iOS7以上图片模糊效果
- BZOJ1701 : [Usaco2007 Jan]Cow School牛学校
- Linux监控工具 (Linux Monitor Tools)
- JDBC资料集
- Mysql几种索引类型的区别及适用情况
- android圆角View实现及不同版本这间的兼容(android3.0过后的版本)
- JavaScript函数学习要点总结(一)
- [Angular Tutorial] 2-Angular Templates
- GetStdHandle 函数--获取标准设备的句柄
- python之爬虫
- 【原创】IDEA一定要改的八条配置
- 数字进度条组件NumberProgressBar
- python根据字符串导入模块
- 猜字游戏java
- 经典论文翻译导读之《Finding a needle in Haystack: Facebook’s photo storage》
- PAT 甲级 1029 Median
- idea 换主题
- ELK篇---------elasticsearch集群安装配置
热门文章
- Spring beanDefinition载入
- python之迭代器,生成器小结
- UML第一次个人作业
- moviepy音视频剪辑:视频基类VideoClip子类VideoFileClip、CompositeVideoClip、ImageSequenceClip介绍
- moviepy简介及安装
- 第12.7节 Python标准库内置模块小结
- Alpha冲刺——序言篇(任务与计划)
- Pytorch训练时显存分配过程探究
- 【APIO2019】路灯(ODT &; (树套树 | CDQ分治))
- JQuery统一复写美化项目中所有radio单选按钮样式