两个链表的交集
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]
如果您要比较 值 ,您会在第一时间找到相等性 - 在比较 headA
和 headB
指向的节点时到。尽管它们具有相同的值,但它们不是相同的节点。
该算法的目标是找到两个列表共享的第一个节点(不仅仅是共享值,而是节点本身)。因此,当我们沿着两个列表遍历两个指针时,我们希望找到两个指针都引用 相同 节点的状态。这相当于说这些指针具有相同的值。
我已经将此代码写入 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]
如果您要比较 值 ,您会在第一时间找到相等性 - 在比较 headA
和 headB
指向的节点时到。尽管它们具有相同的值,但它们不是相同的节点。
该算法的目标是找到两个列表共享的第一个节点(不仅仅是共享值,而是节点本身)。因此,当我们沿着两个列表遍历两个指针时,我们希望找到两个指针都引用 相同 节点的状态。这相当于说这些指针具有相同的值。