我正在嘗試解決以下問題:
給定兩個代表兩個非負整數的非空鏈表。數字按正序存盤,每個節點都包含一個數字。將兩個數字相加并將總和作為鏈表回傳。您可以假設這兩個數字不包含任何前導零,除了數字 0 本身。
Example:
2 --> 4 --> 3
5 --> 6 --> 4
8 --> 0 --> 7
Input: l1 = [2,4,3], l2 = [5,6,4]
Output: [8,0,7]
Explanation: 243 564 = 807
鏈表是 ListNode 物件的集合,其中每個物件指向下一個物件。ListNode 類如下:
// Definition for singly-linked list.
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
我用遞回方法嘗試了以下解決方案
import java.util.HashMap;
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode head = new ListNode(0);
head.val = generateSumList(l1.next, l2.next, head.next);
return head;
}
public int generateSumList(ListNode l1, ListNode l2, ListNode res) {
int rest, sum;
if (l1.next == null && l2.next != null) {
return generateSumList(l1, l2.next, res.next);
}
if (l1.next != null && l1.next == null) {
return generateSumList(l1.next, l2, res.next);
}
if (l1.next == null && l2.next == null) {
sum = l1.val l2.val;
if (sum > 9) {
ListNode n = new ListNode(sum % 10, null);
res = n;
return 1;
}
else {
ListNode n = new ListNode(sum, null);
res = n;
return 0;
}
}
rest = generateSumList(l1.next, l2.next, res.next);
sum = l1.val l2.val rest;
if (sum > 9) {
res.val = sum % 10;
return 1;
}
else {
res.val = sum;
return 0;
}
}
}
我在運行時遇到以下錯誤訊息,我不明白為什么。
java.lang.NullPointerException: Cannot read field "next" because "<parameter1>" is null
at line 27, Solution.generateSumList
at line 17, Solution.addTwoNumbers
at line 54, __DriverSolution__.__helper__
at line 87, __Driver__.main
為什么我有 NPE?我解決問題的方法和我對如何解決問題的直覺是否正確?
uj5u.com熱心網友回復:
為什么我有 NPE?
您分配給的節點head有一個next成員是null。這null作為最后一個引數傳遞給generateSumList,所以res就是null。當以下行都l1.next沒有執行并在評估時產生 NPEl2.next時:nullres.next
rest = generateSumList(l1.next, l2.next, res.next);
我解決問題的方法和我對如何解決問題的直覺是否正確?
不,它不能那樣作業。一方面,如果兩個串列的長度不相等,您就不能希望對齊兩個串列中的兩個對應數字。盡管您將最后兩位數字對齊并相加,但最終sum = l1.val l2.val rest;會被執行,但是這兩個節點在從left計數時的位置相同,但應該按照它們與right的距離對齊。簡而言之,當串列的長度不相等時,這sum是對不相關的數字求和。
為了實作節點的正確對齊,您最好先反轉兩個串列,因此最低有效數字排在第一位,并且在您前進時自然對齊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/532000.html
標籤:爪哇递归链表空指针异常
上一篇:避免使用for回圈低于索引-1
