题目描述
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。
图示两个链表在节点 c1 开始相交:
题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构 。
解题思路
应该利用本体中链表的具体特点。若链表有相交节点,那么其后的所有节点应该相同,也就是说其后节点长度也相同。由此,应该将长链表遍历至所剩长度和短链表相同的位置,然后一一比对,直到找到交点。
注意
- 两个不同的空指针不相等。
关键代码
- 将两个两个指针指向所剩相同数量的链表节点位置。
while(asize > bsize){ //当a链表长度大于b链表时,后移pa指针,直至asize == bsize
pa = pa->next;
asize--;
}
while(asize < bsize){
pb = pb->next;
bsize--;
}
- 返回值
return pa == nullptr ? nullptr : pa; // 若其中一个指针遍历至链表末尾,则说明没有找到相等节点;