假设两个链表都没有环
方法一:直接循环判断第一个链表的每个节点是否在第二个链表中。时间复杂度为O(Length(h1) * Length(h2))
方法二:对第一个链表构造hash表,然后遍历第二个链表,若第二个链表中某个节点存在于hash表中,则说明第二个链表与第一个链表有相同的节点。
线性时间复杂度:O(Length(h1) + Length(h2))、线性空间复杂度为O(Length(h1))。
方法三:双指针法,长链表的指针先向前走到短链表头部的位置后,两个指针对应的节点同时向前走并判断是否相同即可。
- 定义两个指针aPoint和bPoint,最初都指向链表各自的头节点。
- 计算A链表的长度和B链表的长度,并且计算长度差diff。
- 若A链表长度大于B链表长度,则aPoint指针先向前走diff步。此时,aPoint和bPoint举例尾节点的距离就相同了。然后判断aPoint和bPoint是否同一个节点,如果是则直接返回,如果不是则aPoint和bPoint同时向后走一步再进行判断,直到到达尾节点。
线性时间复杂度:O((Length(h1) + Length(h2))、常数空间复杂度:O(1)