剑指 Offer.52-两个链表的第一个公共节点
剑指 Offer.52-两个链表的第一个公共节点
题目链接
https://leetcode-cn.com/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof/
问题描述
输入两个链表,找出它们的第一个公共节点
个人想法
通过hashSet记录一条链表的访问节点,遍历第二条节点,当出现重复元素时即证明出现重复节点,经编程尝试,无法通过用例1,是因为hashSet会覆盖掉相同元素的节点,任意链表非公共部分与公共部分存在相同元素时,会出现错误,故此法无法通过
官方解法
使用两个指针同时对链表进行遍历,当任意一条节点遍历到头时,从另一条节点的头部开始继续遍历,当两个节点到相同位置时,停止遍历并返回
如 A =[4,1,8,4,5],B=[5,0,1,8,4,5]
,将链表的公共部分的长度记为c
,A
链表的非公共长度为a-c
,B
链表的非公共长度为b-c
,按照以上遍历的方案,B的遍历至第一个公共节点长度为(a-c)+b
,A的遍历至第一个公共节点的总长度为(b-c)+a
,两指针终会在第一个公共节点相遇。
代码实现
1 | public class Solution { |