题目描述:
思路:
- 如果head1 ==head1,直接返回head1 .
- 否则,分别从head1,head2开始遍历两个链表分别获得长度lenA和lenB
- 如果lenA >= lenB那么指针p由head开始向后移动lenA-lenB步。指针q=head2,
- 接着p和q每次向后前进一步并比较p和q是否相等。
- 如果相等就返回该结点。 否则两个链表没有交点
代码实现:
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB)
{
int lenA = 0,lenB = 0;
struct ListNode *p = headA;
struct ListNode *q = headB;
while(p != NULL)
{
p = p->next;
lenA++;
}
while(q != NULL)
{
q = q->next;
lenB++;
}
p = headA,q = headB;
if(lenA > lenB)
while(lenA - lenB > 0)
{
p = p->next;
lenA--;
}
else
while(lenB - lenA > 0)
{
q = q->next;
lenB--;
}
while(p != NULL)
{
if(p != q)
{
p = p->next;
q = q->next;
}
else
return q;
}
return NULL;
}