面试题 02.07. 链表相交
题目链接
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists-lcci/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目描述
题目分析
如果存在相交,两个链表的末尾对齐后,从后往前存在对应的结点。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
int lenA = 0, lenB = 0;
ListNode *curA = headA, *curB = headB;
while(curA != nullptr){
lenA++;
curA = curA->next;
}
while(curB != nullptr){
lenB++;
curB = curB->next;
}
curA = headA, curB = headB;
//固定A是较长的链表
if(lenA < lenB){
swap(lenB, lenA);
swap(curB, curA);
}
int diff = lenA - lenB;
while(diff--){
curA = curA->next;
}
//此时两个指针已末尾对齐
while(curA != nullptr){
if(curA != curB){
curA = curA->next;
curB = curB->next;
}else{
return curA;
}
}
return curA;
}
};