两个链表的第一个公共节点
问题描述
输入两个链表,找出它们的第一个公共节点。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路1
分别遍历两个链表,得到两个链表的长度,记为
l1
和l2
;让较长的先走
|l1 - l2|
步,然后一起走,第一个相同节点即为公共节点;
思路2
本质上跟思路1 是类似的,但是更巧妙,写法也更简洁;
把 headA 和 headB 都分为两段,记
headA = la + lc
,headB = lb + lc
,其中lc
为公共部分;对指针 pa,当遍历完 headA 后紧接着遍历 headB;指针 pb 和 headB 同理,那么遍历过程如下:
headA -> headB = la -> lc -> lb -> lc headB -> headA = lb -> lc -> la -> lc
因为
la + lc + lb == lb + lc + la
,当 pa 和 pb 遍历完这三段时,接下去的第一个节点就是公共节点;如果 lc 部分的长度为 0,那么公共节点就是 NULL;
Last updated