创建一个虚拟头节点
同样还是用了虚拟节点
- 使用哈希表,将其中一个链表的节点不断添加进去
- 遍历第二个链表,如果在哈希表中找到了节点,则返回节点的数据值
快慢指针,fast 与 slow。它们起始都位于链表的头部。随后,slow 指针每次向后移动一个位置,而 fast 指针向后移动两个位置。如果链表中存在环,则fast 指针最终将再次与 slow 指针在环中相遇。
可以看出 (a+b)*2 = a+n(b+c)+b
a=c+(n-1)(b+c)
因此,当发现 slow 与 fast 相遇时,我们再额外使用一个指针ptr。起始,它指向链表头部;随后,它和 slow 每次向后移动一个位置。最终,它们会在入环点相遇。