我正在嘗試標準面試問題,即以鏈表形式添加兩位數字並返回添加的答案。這裏是問題:無法在Java中分配LinkedList頭節點以供將來參考
給你兩個鏈表,代表兩個非負數。 這些數字以相反的順序存儲,並且它們的每個節點都包含一個數字,即 。添加這兩個數字並將其作爲鏈接列表返回。
輸入:(2 - > 4 - > 3)+(5 - > 6 - > 4)輸出:7 - > 0 - > 8
342 + 465 = 807 Make sure there are no trailing zeros in the output list So, 7 -> 0 -> 8 -> 0 is not a valid response even though
值仍然807
現在,我正在編寫的代碼以ListNode
數據類型的形式接受兩個參數,它是LinkedLists的起始節點。我不理解的是
- 如何維護列表的頭節點以供後面參考?
在Java中如何調用值和引用調用工作?我已經處理了C++中的指針和引用調用,但是我現在一直在嘗試使用Java中的東西,而且它非常不同。
class ListNode { public int val; public ListNode next; ListNode(int x) { val = x; next = null; } } public class Solution { public ListNode reverse(ListNode head) { ListNode curr = head; ListNode next = null; ListNode prev = null; while (curr != null) { next = curr.next; curr.next = prev; prev = curr; curr = next; } head = prev; return head; } public ListNode addTwoNumbers(ListNode a, ListNode b) { ListNode node = null; ListNode head = null; boolean carry = false; while (a != null || b != null) { int f = 0, s = 0; if (carry) { f++; } carry = false; if (a != null) { f += a.val; a = a.next; } if (b != null) { s = b.val; b = b.next; } if (f + s > 9) { carry = true; } int curr = (f + s) % 10; node = new ListNode(curr); if (head == null) { head = node; } node = node.next; //warning that 'value of node assigned is never used' } if (carry) { node = new ListNode(1); } printList(head); return node; } }
「如何按值調用和引用工作Java調用」 Java是[調用 - 值(http://stackoverflow.com/questions/40480/is-java-pass-by-引用或傳遞值),總是。但是,在這種情況下,「價值」的含義是令人困惑的:被傳遞的變量的值,這可能是一個參考。所以,雖然引用的對象不是按值傳遞的,但引用該對象的變量是;這意味着你不能像在C++中那樣使用單獨的方法來交換值。 –
@AndyTurner在Java中處理LinkedList問題的最佳方法是什麼?因爲在Java中保持頭部和其他值很痛苦,所以如果我簡單地執行'head = node',那麼head的值根據節點而改變,並且我不能在最後檢索頭值。如何避免這種情況? – tsaebeht