算法刷题记录.leetcode0207.链表相交

43 阅读1分钟

题目描述

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

图示两个链表在节点 c1 开始相交:

题目数据 保证 整个链式结构中不存在环。

注意,函数返回结果后,链表必须 保持其原始结构 。

链接:leetcode.cn/problems/in…

解题思路

应该利用本体中链表的具体特点。若链表有相交节点,那么其后的所有节点应该相同,也就是说其后节点长度也相同。由此,应该将长链表遍历至所剩长度和短链表相同的位置,然后一一比对,直到找到交点。

注意

  • 两个不同的空指针不相等。

关键代码

  • 将两个两个指针指向所剩相同数量的链表节点位置。
while(asize > bsize){ //当a链表长度大于b链表时,后移pa指针,直至asize == bsize

    pa = pa->next;

    asize--;

}

while(asize < bsize){

    pb = pb->next;

    bsize--;

}
  • 返回值
return pa == nullptr ? nullptr : pa; // 若其中一个指针遍历至链表末尾,则说明没有找到相等节点;