链接:https://leetcode.com/problems/add-two-numbers/solution/#
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummyHead = new ListNode(0);
ListNode p = l1, q = l2, curr = dummyHead;
int carry = 0;
while (p != null || q != null) {
int x = (p != null) ? p.val : 0;
int y = (q != null) ? q.val : 0;
int sum = carry + x + y;
carry = sum / 10;
curr.next = new ListNode(sum % 10);
curr = curr.next;
if (p != null) p = p.next;
if (q != null) q = q.next;
}
if (carry > 0) {
curr.next = new ListNode(carry);
}
return dummyHead.next;
}
}
大家好,今天早上我遇到了LeetCode的问题。我解决了它,但想向官方解决方案提出一个问题。
我知道在函数中定义的变量是不安全的(因为它将被回收)。但是,据我所知,那些在代码块中定义的变量(如while / for )也应该由JVM回收。虽然JVM不会回收它,因为仍然有指针指向地址,我想知道是否仍然不能安全地向全局ListNode提供临时地址?
curr.next = new ListNode(carry);
毕竟,我想知道JVM是否必须经常监视ListNode使用临时地址,从而导致额外的时间消耗?
谢谢!我还在Leetcode的问题讨论中讨论了上述内容,但我真的想知道我是否考虑过多了?
答案 0 :(得分:0)
我可以假设您已经使用过Java语言(就像您已经编写过的C语言一样) 关于你的担忧,我可以总结一下
您关心的是
curr.next = new ListNode(carry);
这个curr可以被java GC回收,这可能导致访问下一次引发异常? =>别担心。 curr仅在addTwoNumbers()执行后(至少)执行。
所以你的问题
如果在这里向全局ListNode提供临时地址仍然不安全吗?
=>不,这是安全的。你很简单地构造一个新对象,没关系。
关于
的下一个问题JVM必须经常监视ListNode使用临时地址,导致额外的时间消耗?
如我所见,你的分配中没有额外的时间消耗。