class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode ans = null; ListNode p = ans; int add = 0; ListNode r1 = reverseList(l1); ListNode r2 = reverseList(l2); while(r1!=null || r2!=null || add!=0){ int x = r1==null ? 0 : r1.val; int y = r2==null ? 0 : r2.val; int res = x+y+add; p.val = res%10; add = res/10; p = p.next; } return ans; } private ListNode reverseList(ListNode l){ ListNode perv = null; ListNode curr = l; while(curr!=null){ ListNode next = curr.next; curr.next = perv; perv = curr; curr = next; } return perv; } }
时间: 2024-02-14 17:27:12 浏览: 127
python-leetcode面试题解之两数相加AddTwoNumbers.zip
你好,对于你给出的代码,我注意到一些问题。首先,在你的 `addTwoNumbers` 方法中,你没有为 `ans` 分配一个新的节点来存储结果,而是直接将 `null` 赋给了 `ans`。这会导致空指针异常。你需要在循环中创建新的节点,并将新节点赋值给 `ans`。其次,你没有为 `p` 分配一个新的节点来保存当前节点的引用。你需要在循环中为 `p` 创建新的节点,并更新 `p` 的 `next` 引用。最后,你在循环中没有更新 `r1` 和 `r2` 的指针,导致循环无法结束。你需要在每次循环后更新 `r1` 和 `r2` 的指针。
下面是对你的代码进行修正的示例:
```java
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode ans = new ListNode(0);
ListNode p = ans;
int add = 0;
ListNode r1 = reverseList(l1);
ListNode r2 = reverseList(l2);
while (r1 != null || r2 != null || add != 0) {
int x = r1 == null ? 0 : r1.val;
int y = r2 == null ? 0 : r2.val;
int res = x + y + add;
p.next = new ListNode(res % 10);
add = res / 10;
p = p.next;
if (r1 != null) r1 = r1.next;
if (r2 != null) r2 = r2.next;
}
return reverseList(ans.next);
}
private ListNode reverseList(ListNode l) {
ListNode prev = null;
ListNode curr = l;
while (curr != null) {
ListNode next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
}
}
```
希望能对你有所帮助!如果你还有其他问题,请随时提问。
阅读全文