思路:
说实话,一开始我没想出来为什么O(n+m)能遍历出结果,然后我看了解析,我的理解就是A链表跑完就去跑B链表,B链表跑完就去跑A链表,那总长度是一样的,跑完一圈还没有一样的,那就是不相交。那为什么跑完一圈会有一样的case呢? 因为两个链表相交部分长度相同,不相交部分长度不同,两个链表相互跑就会形成一种快慢指针的感觉,这样就会导致出现相同节点的情况。
代码:
/**
* 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 p1 = headA, p2 = headB;
while(p1 != p2){
if(p1 == null) p1 = headB;
else p1 = p1.next;
if(p2 == null) p2 = headA;
else p2 = p2.next;
}
return p1;
}
}