文章目录
题目
思路
双指针一起遍历的思路
a指针指向 headA, b 指针指向 headB, 两个指针一起向后遍历, 如果 a 指针走到了 headA 的末尾,则把 a 指针设置为 headB, 继续从 B链表开始遍历, 同理, b 指针和A一样,这样子一起遍历直到 a 与 b 相等,或者是 a 为空 , b 也为空。
假设 链表A的长度为 lenA, B 的长度为 lenB, 链表A头节点到 交点的距离为 lena, 链表B头节点到交点的距离为 lenb
-
有交点的情况
因为交点之后的公共长度是相等的,所以有如下关系式
lenA - lena = lenB - lenb
所以
lenA + lenb = lenB + lena
这说明,遍历一遍 A 链表 + 从B头节点到交点的距离 就是 指针总共走的距离 -
无交点的情况
无交点,则 a 走完 A 链表之后,从 B 开始走,最终会走到 B的尾节点,最终会为空。 b 也 一样,两者会都为空, 两者走过的距离 相同, 都为 lenA + lenB
代码实现(Java)
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode a = headA;
ListNode b = headB;
while(a!=b) {
a = a!=null?a.next:headB;
b = b!=null?b.next:headA;
}
return a;
}
}
坚持分享,坚持原创,喜欢博主的靓仔靓女们可以看看博主的首页博客!
您的点赞与收藏是我分享博客的最大赞赏!
博主博客地址: https://blog.csdn.net/weixin_43967679