标题题目地址

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 题解 - 链表

最新文章

  1. Write on &hellip;&hellip;&hellip; failed: 112(failed to retrieve text for this error. Reason: 15105)
  2. GP服务将矢量数据加入到栅格数据中的方法
  3. iOS7以上图片模糊效果
  4. BZOJ1701 : [Usaco2007 Jan]Cow School牛学校
  5. Linux监控工具 (Linux Monitor Tools)
  6. JDBC资料集
  7. Mysql几种索引类型的区别及适用情况
  8. android圆角View实现及不同版本这间的兼容(android3.0过后的版本)
  9. JavaScript函数学习要点总结(一)
  10. [Angular Tutorial] 2-Angular Templates
  11. GetStdHandle 函数--获取标准设备的句柄
  12. python之爬虫
  13. 【原创】IDEA一定要改的八条配置
  14. 数字进度条组件NumberProgressBar
  15. python根据字符串导入模块
  16. 猜字游戏java
  17. 经典论文翻译导读之《Finding a needle in Haystack: Facebook’s photo storage》
  18. PAT 甲级 1029 Median
  19. idea 换主题
  20. ELK篇---------elasticsearch集群安装配置

热门文章

  1. Spring beanDefinition载入
  2. python之迭代器,生成器小结
  3. UML第一次个人作业
  4. moviepy音视频剪辑:视频基类VideoClip子类VideoFileClip、CompositeVideoClip、ImageSequenceClip介绍
  5. moviepy简介及安装
  6. 第12.7节 Python标准库内置模块小结
  7. Alpha冲刺——序言篇(任务与计划)
  8. Pytorch训练时显存分配过程探究
  9. 【APIO2019】路灯(ODT &amp; (树套树 | CDQ分治))
  10. JQuery统一复写美化项目中所有radio单选按钮样式