Я пытаюсь задать стандартный вопрос для интервью, который должен добавить две цифры в виде связанных списков и вернуть добавленный ответ. Возникает вопрос:Невозможно назначить главный узел LinkedList в Java для дальнейшего использования
Вам даются два связанных списка, представляющих два неотрицательных числа. Цифры хранятся в обратном порядке, и каждый из их узлов содержит на одну цифру. Добавьте два числа и верните их как связанный список.
Входной сигнал: (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» Ява [вызов по значению] (http://stackoverflow.com/questions/40480/is-java-pass-by- reference-or-pass-by-value) всегда. Но то, что понимается под «значением» в этом контексте, запутывает: значение передаваемой переменной, которое может быть ссылкой. Таким образом, пока ссылочный объект не передается по значению, переменная, относящаяся к этому объекту; это означает, что вы не можете делать такие вещи, как обмен значениями в отдельном методе, как на C++. –
@AndyTurner Что было бы лучшим способом решения таких вопросов LinkedList, как это в Java?Поддержание головы и других ценностей в боль, потому что в Java, если я просто делаю 'head = node', тогда значение головы изменяется в соответствии с узлом, и я не могу получить начальное значение в конце. Как этого избежать? – tsaebeht