这道题很简单,思路大概是找出最长的那个链表,然后长链表从头开始除掉比短链表长的那一部分,当然不是删掉,移动一下指针就行了,这样下来两个链表就对齐了。之后,一对一的比较,若相同就是交汇处,到遍历完时,没有找到交叉点,那就是空了。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
int length(ListNode* head)
{
ListNode* p=head;
int count=0;
while(p!=NULL)
{
count++;
p=p->next;
}
return count;
}
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode *posShort,*posLong;
int lengthA=length(headA);
int lengthB=length(headB);
if(lengthA>lengthB)
{
posShort=headB;
posLong=headA;
}
else
{
posShort=headA;
posLong=headB;
}
int distance=abs(lengthA-lengthB);
while (distance>0)
{
posLong=posLong->next;
distance--;
}
while (posLong!=NULL)
{
if(posLong->val==posShort->val)
return posShort;
posLong=posLong->next;
posShort=posShort->next;
}
return NULL;
}
};