struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
int lenA = 0;
int lenB = 0;
struct ListNode* cur1 = headA;
struct ListNode* cur2 = headB;
//先取到两个链表的长度
while (cur1 != NULL) {
lenA++;
cur1 = cur1->next;
}
while (cur2 != NULL) {
lenB++;
cur2 = cur2->next;
}
int num = lenA > lenB ? lenA - lenB : lenB - lenA;
struct ListNode* longlist = headA;
struct ListNode* shortlist = headB;
if (lenB > lenA) {
longlist = headB;
shortlist = headA;
}
//让长的链表先走 num(长短差值) 步 , 然后他们一起走, 找到第一个相遇点即可
while (num > 0) {
longlist = longlist->next;
num--;
}
while (longlist != NULL) {
if (longlist == shortlist)
return longlist;
longlist = longlist->next;
shortlist = shortlist->next;
}
return NULL;
}
找到两个单链表相交的起始节点
最新推荐文章于 2023-12-03 15:39:07 发布