我正在嘗試從 Leetcode 添加兩個數字的問題的 Java 解決方案。
這是 Java 解決方案,但我有一個問題。為什么 dummyHead.next 在 while cicle 從未將數字分配給此串列節點時回傳結果。如果 curr 等于 dummyHead 而不是相反,那么 curr 如何分配給 dummyHead?
class Solution {
// Add Two Numbers (Java improved)
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummyHead = new ListNode(0);
ListNode curr = dummyHead;
int carry = 0;
while (l1 != null || l2 != null || carry != 0) {
int x = (l1 != null) ? l1.val : 0;
int y = (l2 != null) ? l2.val : 0;
int sum = carry x y;
carry = sum / 10;
curr.next = new ListNode(sum % 10);
curr = curr.next;
if (l1 != null)
l1 = l1.next;
if (l2 != null)
l2 = l2.next;
}
return dummyHead.next;
}
}
uj5u.com熱心網友回復:
重要的是new ListNode(0)那是什么dummyHead 和 curr開始。沒有不同ListNode。所以如果你交換curr并dummyHead喜歡
ListNode curr = new ListNode(0);
ListNode dummyHead = curr;
它的行為方式相同。
uj5u.com熱心網友回復:
LinkedList 總是有兩個欄位:一個是值,第二個是指向下一個節點的指標。如果它是最后一個節點,則 next 指向 null。
在您提到的代碼中:
第 1-3 行:使用 dummyHead 生成新的結果鏈表頭,并將變數 curr 分配給該頭以用于移動和分配目的。
進位僅用于檢查總和是否大于 10 是否會轉發到下一次迭代。
在 while 回圈中:我們一直在回圈,直到所有值都變為空。
如果一個或兩個值為空,那么我們使用三元運算子分配 0,并生成總和。
生成總和后,模塊將被視為進位,除法將被視為節點的值。
回圈完成后,我們使用我們創建的變數回傳鏈表的頭部。
它應該是 dummyHead.next 因為 dummyHead 是我們初始化的節點 0,但實際結果從下一個值開始。
uj5u.com熱心網友回復:
快速解釋是有一個節點鏈,由next每個Node. dummyHead用于指向鏈的第一個節點。最初,dummyHead和curr是同一個節點。在重新分配其中一個之前,它們將是同一個節點。
結果將以鏈表的形式回傳,其結構/代碼在solution標題上方的注釋中描述。
正確的代碼需要回傳單鏈表的頭部(第一個節點)。頭節點將鏈接到第 2 個節點,第 2 個節點將鏈接到第 3 個節點,依此類推,以獲取所需的多個節點。最后一個節點將鏈接到null.
ListNode dummyHead = new ListNode(0);
ListNode curr = dummyHead;
dummyHead并且curr是參考型別。在這一點上,它們是同一個物件的兩個名稱:val一個與val另一個相同。next其中一個與另一個相同next。執行以下行時會發生什么?
curr.next = new ListNode(sum % 10);
`next` in `dummyHead` and `next` in `curr` point to the newly created `Node`. Remember, in the initial iteration, they are two names for the same object.
What happens when the following line is executed?
curr = curr.next;
現在,curr指向新創建的Node. 如果串列只有一個節點,我. But, dummyHead still points to the first node -- the one to be returned. They no longer refer to the sameObject . And next indummyHead null`。points to the 2nd node in the list, or
因此,隨著迭代的進行,new Node創建了 a。鏈中的最后一個節點,稱為cur,鏈接到新節點。然后,cur更新為指向新節點。并dummyHead繼續指向第一個節點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/514845.html
標籤:爪哇算法解决方案
