两个链表的第一个公共节点
Last updated
Last updated
问题描述
思路1
分别遍历两个链表,得到两个链表的长度,记为 l1
和 l2
;
让较长的先走 |l1 - l2|
步,然后一起走,第一个相同节点即为公共节点;
思路2
本质上跟思路1 是类似的,但是更巧妙,写法也更简洁;
把 headA 和 headB 都分为两段,记 headA = la + lc
,headB = lb + lc
,其中 lc
为公共部分;
对指针 pa,当遍历完 headA 后紧接着遍历 headB;指针 pb 和 headB 同理,那么遍历过程如下:
因为 la + lc + lb == lb + lc + la
,当 pa 和 pb 遍历完这三段时,接下去的第一个节点就是公共节点;
如果 lc 部分的长度为 0,那么公共节点就是 NULL;