两个链表的交集

Intersection of two linkedlists

我已经将此代码写入 return 两个链表的交集。不过一开始我在比较if(pointer1.val == pointer2.val)的时候报错,后来发现应该是if(pointer1==pointer2),我还是个初学者,不明白为什么不比较指针的值,pointer1==pointer2 和比较它们的值有什么区别...

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        
       if(headA==null || headB==null){
           return null;
       }
        ListNode pointer1=headA;
        ListNode pointer2=headB;
        
        while(pointer1 !=pointer2){
            pointer1=pointer1.next;
            pointer2=pointer2.next;
            
            if(pointer1==pointer2)
                return pointer1;
            if(pointer1==null){
                pointer1=headB;
            }
            if(pointer2==null){
                pointer2=headA;
            }
        }
        return pointer1;
    }
}

why I don't compare the values of the pointers, and what is the difference of pointer1==pointer2 and comparing their values

想象一下所有节点都具有相同值的情况:

 headA -> [1] -> [1] -> [1] -> [1] -> [1] -> null
                             /
                            /
        headB -> [1] -> [1] 

如果您要比较 ,您会在第一时间找到相等性 - 在比较 headAheadB 指向的节点时到。尽管它们具有相同的值,但它们不是相同的节点。

该算法的目标是找到两个列表共享的第一个节点(不仅仅是共享值,而是节点本身)。因此,当我们沿着两个列表遍历两个指针时,我们希望找到两个指针都引用 相同 节点的状态。这相当于说这些指针具有相同的值。