题目
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f1678eb394068d6efdac0865df50a406.png)
解析
- 题目最重要的一点就是链表一旦相交后面的部分一定是相同的,所以目标就是找到相交的点
- 但相交的点不是指数值相等,而是指指针相同,所以例子中不是从1开始而是从8开始
- 意思是同一个地址,A链表1的下一个指向和B链表1的下一个指向是同一个listnode,而1不是同一个listnode,比较的是listnode是否相同,而不是val值
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
Set<ListNode> set = new HashSet();
ListNode temp = headA;
while (temp != null) {
set.add(temp);
temp = temp.next;
}
temp = headB;
while (temp != null) {
if (set.contains(temp)) {
return temp;
}
temp = temp.next;
}
return null;
}
}
解法二
- 双指针遍历,a先遍历A,b遍历B,然后让a遍历B,b去遍历A,如果ab指的一样就返回
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if (headA == null || headB == null) {
return null;
}
ListNode pA = headA, pB = headB;
while (pA != pB) {
pA = pA == null ? headB : pA.next;
pB = pB == null ? headA : pB.next;
}
return pA;
}
}