私はリンクリストの形で2桁を追加し、追加された答えを返す標準的なインタビューの質問をしています。将来の参照のためにJavaでLinkedListのヘッドノードを割り当てることができません
あります2つの非負の数値を表す2つのリンクされたリストが与えられます。 数字は逆順で格納され、ノードのそれぞれには の1桁が含まれます。 2つの数値を加算し、リンクされたリストとして返します。
入力:(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
私が書いているコードでは、LinkedListsの開始ノードであるListNode
というデータ型の形式で2つの引数を取ります。私が理解していないのは
- どのように私は後で参照するためにリストのヘッドノードを維持するのですか?
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は[call-by-value]です(http://stackoverflow.com/questions/40480/is-java-pass-by-値の参照または渡し)は、常にです。しかし、この文脈における "価値"の意味は混乱しています。渡される変数の値です。これは参考になります。したがって、参照されたオブジェクトが値渡されていない場合、そのオブジェクトを参照する変数は次のようになります。つまり、C++のように別のメソッドで値を入れ替えるようなことはできません。 –
@AndyTurnerこのようなLinkedListの質問をJavaで処理する最良の方法は何でしょうか?Javaでは、単にhead = node'を実行すると、headの値がnodeに応じて変化し、私は最後に頭の値を取り出すことができないため、頭や他の値を痛みの中で維持します。これを避ける方法は? – tsaebeht