我撰寫了這段代碼來回傳兩個鏈表的交集。不過,一開始我在比較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;
}
}
uj5u.com熱心網友回復:
為什么我不比較指標的值,pointer1==pointer2 和比較它們的值有什么區別
想象一下所有節點都具有相同值的情況:
headA -> [1] -> [1] -> [1] -> [1] -> [1] -> null
/
/
headB -> [1] -> [1]
如果您比較values,您會在第一次發現相等性 - 在比較headA和headB指向的節點時。盡管它們具有相同的值,但它們不是相同的節點。
該演算法的目標是找到兩個串列共享的第一個節點(不僅僅是共享值,而是節點本身)。所以當我們用兩個指標沿著兩個鏈表遍歷時,我們希望找到兩個指標都參考同一個節點的狀態。這相當于說這些指標具有相同的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/484001.html
下一篇:如何為結構分配記憶體?
