先求两链表长度差L
先让长链表头指针先往前走L,再两链表指针一块走,将会在相交的链表节点处碰头
/**
* 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) {
ListNode *p=headA,*q=headB;
int L=0;
while(p) ++L,p=p->next;
while(q) --L,q=q->next;
if(L>0) p=headA,q=headB;
else q=headA,p=headB;
L=L>0?L:-L;
while(L--) p=p->next;
while(p!=q) p=p->next,q=q->next;
return p;
}
};