/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode ListNode;
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
int lengthA = 1, lengthB = 1;
ListNode *curA = headA, *curB = headB;
// 找到尾结点,并结算长度
while (curA->next) {
lengthA++;
curA = curA->next;
}
while (curB->next) {
lengthB++;
curB = curB->next;
}
// 尾结点不相同,说明不相交
if (curA != curB) {
return NULL;
}
/* 先假设长的链表是A和短的链表是B,再纠正 */
ListNode *longList = headA, *shortList = headB;
if (lengthA < lengthB) {
longList = headB;
shortList = headA;
}
/* 计算差值,并让长的先走差值步,最后一起走找到相交点 */
int difference = abs(lengthA - lengthB);
while (difference--) {
longList = longList->next;
}
while (longList != shortList) {
longList = longList->next;
shortList = shortList->next;
}
return longList;
}
【leetcode】160. 相交链表
最新推荐文章于 2024-09-08 20:02:08 发布