双指针问题。长的链表先走,然后剩余长度一致了,碰到相同的节点便是相交的起始节点。
int GetListLen(struct ListNode *list)
{
int retLen = 0;
while(list) {
retLen++;
list = list->next;
}
return retLen;
}
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
int counta = 0;
int countb = 0;
struct ListNode *lista = headA;
struct ListNode *listb = headB;
struct ListNode *retlst = NULL;
counta = GetListLen(lista);
countb = GetListLen(listb);
lista = headA;
listb = headB;
while(counta > countb) {
lista = lista->next;
counta--;
}
while(countb > counta) {
listb = listb->next;
countb--;
}
while(lista) {
if(lista == listb) {
retlst = lista;
break;
}
lista = lista->next;
listb = listb->next;
}
return retlst;
}