【刷题第 14 天】两个链表的第一个公共节点
一、题目描述:
输入两个链表,找出它们的第一个公共节点。
在节点 c1 开始相交。
示例 1:
复制代码
示例 2:
复制代码
二、思路分析:
哈希法
哈希大法好,遇到重复问题,应该会第一时间思考到使用哈希表。但哈希法实现比较简单,这里不多做赘述了。
双指针
我们要知道如果两个链表发生了重合,那么意味着从重合节点开始,两个链表后面的元素都是相同的。而且只有两个链表都不是空链表时,才会出现相交清空,因此我们首先判断一些是否存在空链表的特殊临界情况。
我们创建两个指针 pa pb 分别指向两个链表的头指针,然后依次遍历两个链表的节点:
那我们双指针会如何移动那?
每次遍历都需要同步移动指针 pa 和 pb
如果 pa 指针指向非空,则将 pa 指向下一个节点;如果 pb 指针指向非空,同样将 pb 指针指向下一个节点
如果 pa 指向空,则将其指向至链表 B 的头节点;对 pa 同样处理
当 pa 和 pb 指向同一元素或者都指向为空时,返回指向节点或者 null
三、AC 代码:
复制代码
四、总结:
做好双指针,走遍天下都不怕。最近刷题都没来得及总结,只能今夜连夜总结了。
版权声明: 本文为 InfoQ 作者【白日梦】的原创文章。
原文链接:【http://xie.infoq.cn/article/a19259af2ce0b0eb1770c98b5】。文章转载请联系作者。
评论