编写一个程序,找到两个单链表相交的起始节点。
思路:给两个指针curA和curB同时从两个链表的起始位置开始比较,如果cur1和cur2两个字节的地址相同,则为交点,否则两个指针同时往下移动
b-a的节点个数 让长的先走b-a次 然后同时走.
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
//如果有一个为空则不相交
if(nullptr == headA || nullptr == headB)
return nullptr;
ListNode* curA = headA;
int countA = 1;//计数
while(curA->next)
{
countA++;
curA = curA->next;
}
ListNode* curB = headB;
int countB = 1;
while(curB->next)
{
countB++;
curB=curB->next;
}
//如果最后一个节点地址不相同,则不可能相交
if(curA != curB)
return nullptr;
curA = headA;
curB = headB;
int gap = countA-countB;
if(gap>0)
{
while(gap--)
curA = curA->next;
}
else
{
while(gap++)
curB = curB->next;
}
//从相同位置开始寻找
while(curA !=curB)
{
curA = curA->next;
curB = curB->next;
}
return curA;
}
};