LeetCode基础-链表-找到两个链表的交点
来源:互联网 发布:上瘾网络剧结局是什么 编辑:程序博客网 时间:2024/05/16 11:41
单链表数据结构:
//Definition for singly-linked list. public class ListNode { public int val; public ListNode next; public ListNode(int x) { val = x; } }
思路:
注:此算法来自discuss区排第一名的一个比较巧妙的算法。
同时遍历两个链表,当两个结点相同时,循环结束。
- 如果两个链表长度相同,且有交点,那么当遇到交点时,循环结束,即找到交点。只需要一次循环。
- 如果两个链表长度相同,没有交点,那么当遍历至尾结点的下一个结点时,两个结点都为空,循环结束,返回null。只需要一次循环。
- 如果两个链表长度不同,且有交点,那么在第一次遍历时肯定不会在交点处相遇,当更短的链表先到达尾结点时,切换到长链表,而长链表到达尾结点时也切换到短链表,这样两条路线遍历的长度相等,都是“长链表+短链表”的长度,则第二次遍历时即会相遇。
- 如果两个链表长度不同,没有交点,那么即使切换线路也永远不会相遇,但是两条路线遍历的长度相等,都是“长链表+短链表”的长度,则第二次遍历时,最终会同时到达各尾结点的下一个结点,即null,循环结束,返回null。
public ListNode getIntersectionNode(ListNode headA, ListNode headB) { //boundary check if(headA == null || headB == null) { return null; } ListNode a = headA; ListNode b = headB; //如果a,b长度相同, 则第一次遍历时就会结束循环 //如果a,b长度不同,则第二次遍历时会结束循环 while(a != b){ //遍历结束时,互换方向,指向另一个链表的头结点 a = a == null? headB : a.next; b = b == null? headA : b.next; } return a;}
阅读全文
0 0
- LeetCode基础-链表-找到两个链表的交点
- 求两个单向链表的交点
- 求两个相交链表的交点
- 求两个单向链表的交点
- 寻找两个链表的交点
- 求两个单向链表的交点
- 求两个相交链表的交点
- 求两个单向链表的交点
- LeetCode OJ 之 Intersection of Two Linked Lists (两个链表的交点)
- LeetCode--Intersection of Two Linked Lists (两个链表的交点)Python
- 关于两个链表的交点的小结
- 寻找两个链表的第一个交点-微策略
- 剑指offer--判断两个链表的第一个交点
- 【链表】判断两个链表是否相交,并求出交点
- 题目:①判断一个单向链表是否有环,如果有环则找到环的入口节点。 ②判断两个单向链表是否相交,如果相交则找到交点节点。
- 判断两个链表是否有交点
- 每日一题(14) - 判断两个无环相交的两个链表的交点
- 求两个单链表的交点
- 世界最高效大面积钙钛矿太阳能电池是什么?|2015中国科技新星评选
- SQL详讲01
- 【DP】51Nod1354[选数字]题解
- Storm线程进程分配方法
- 51nod 1354 选数字【DP】
- LeetCode基础-链表-找到两个链表的交点
- 全球最快指纹识别速度PK:够快才畅快vivo X6无悬念夺冠!
- 雾霾预测频闹乌龙,汽车尾气替谁背锅?
- 移位运算的问题
- git
- 小牛电动车竟然抢了互联网大会的头条
- NLP05-Gensim源码[包与接口]
- CCF201412-1
- 富途证券澄清“见证宝”合规性质疑