这道题关键点在于如何找相交的点,由于相交后的长度一样,所以可以分别求出二者的长度,把长一点的链表p指针往后移动|l1-l2|,再同步往后遍历直到p1 == p2,这时的p1和p2就是交叉点
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
int l1 = 0, l2 = 0;
ListNode *p1 = headA, *p2 = headB;
while(p1){
l1++;
p1 = p1->next;
}
while(p2){
l2++;
p2 = p2->next;
}
p1 = headA;p2 = headB;
if(l1>l2){
for(int i = 0;i<l1-l2;i++){
p1 = p1->next;
}
}else{
for(int i = 0;i<l2-l1;i++){
p2 = p2->next;
}
}
while(p1 && p1!=p2){
p1 = p1->next;
p2 = p2->next;
}
return p1;
}
};