链表题基本都要用快慢指针啊,仔细一想,我把headA, headB弄一个环出来,一快一慢,在O(n)的时间内肯定能找到相交点,然而题目的意思是headA, headB已经相交了,那么假如拿B做一个环,那么A最后也会连接上B的开头。
再用快慢指针指到相交点就好了。
class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if (headA == null || headB == null) {
return null;
}
ListNode last = headB;
while(last.next != null) {
last = last.next;
}
last.next = headB;
ListNode f = headA, s = headA;
while(f != null && f.next != null) {
s = s.next;
f = f.next.next;
if(s == f) {
s = headA;
while(s != f) {
s = s.next;
f = f.next;
}
last.next = null;
return f;
}
}
last.next = null;
return null;
}
}