题目
分析
1、指针 A 指向 A 链表,指针 B 指向 B 链表,依次往后遍历
2、如果 A 到了末尾,则 A = headB 继续遍历;如果 B 到了末尾,则 B = headA 继续遍历.
3、比较长的链表指针指向较短链表head时,长度差就消除了。如此,只需要将最短链表遍历两次即可找到位置。
代码
/**
* 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)
{
if(headA == nullptr || headB == nullptr)
{
return nullptr;
}
ListNode *A = headA, *B = headB;
while(A != B) //遍历最短链表两次便可得到结果。
{
A = A == nullptr? headB : A->next;
B = B == nullptr? headA : B->next;
} //循环结束后若没有相交结点 则返回空节点
return A;
}
};
执行结果
总结
又是双指针解法,深化熟悉该解法。