解题思路
你变成我,我变成你,我们便相遇了。
那么为什么能相遇呢?
设长链表A长度为LA,短链表长度LB;
由于速度相同,则在长链表A走完LA长度时,短链表B已经反过头在A上走了LA-LB的长度,剩余要走的长度为LA-(LA-LB) = LB;
之后长链表A要反过头在B上走,剩余要走的长度也是LB;
也就是说目前两个链表“对齐”了。因此,接下来遇到的第一个相同节点便是两个链表的交点。
那如果两个链表不存在交点呢?
答:这样的话第4步就会一直执行到两个链表的末尾,la,lb都为null,也会跳出循环,返回null。
代码
/**
- 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 la = headA;
ListNode lb = headB;
while(la != lb){
//到达链表末尾时,重新走另一条链表的路
la = la == null ? headB : la.next;
lb = lb == null ? headA : lb.next;
}
return la;
}
}
作者:pi-qia-cheng
链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists-lcci/solution/ni-de-ming-zi-ni-bian-cheng-wo-wo-bian-c-q56d/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。