public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int n1=1;
while(l1.next!=null){ //求出l1链表有多少位
n1++;
l1.next=l1.next.next;
}
int[] array1=new int[n1];
int n2=1;
while(l2.next!=null){ //求出l2链表有多少位
n2++;
l2.next=l2.next.next;
}
int[] array2=new int[n2];
ListNode temp1=l1;
int sum1=0;
int t1=0;
for(int i=0;i<n1;i++){ //每一位数放入数组里面,从个位到...
array1[i]=temp1.val; //这个位置开始报空指针异常,我不知道为什么temp1.next值是空的
t1=(int)Math.pow(10,i)*array1[i];
sum1=sum1+t1;
temp1=temp1.next;
}
ListNode temp2=l2;
int sum2=0;
int t2=0;
for(int i=0;i<n2;i++){ //每一位数放入数组里面,从个位到...
array2[i]=temp2.val;
t2=(int)Math.pow(10,i)*array2[i];
sum2=sum2+t2;
temp2=temp2.next;
}
int sum=sum1+sum2;
int local=0;
int flag=0;
if(n1>n2){
flag=sum/(int)Math.pow(10,n1-1);
local=n1;
}else{
flag=sum/(int)Math.pow(10,n2-1);
local=n2;
}
if(flag<0){
local=local+1;
}
int[] ma=new int[local];
int tp=0;
for(int i=local;i>0;i--){//根据获得的位数和总值,把每一位数取出来
tp=sum/(int)Math.pow(10,i-1);
ma[i-1]=tp;
sum=sum-tp*(int)Math.pow(10,i-1);
if(sum<=0){
break;
}
}
ListNode nl=new ListNode(ma[0]);
if(local>1){
for(int i=1;i<local;i++){
nl.next.val=ma[i];
nl.next=nl.next.next;
}
}
return nl;
}
问题我用备注写在代码里了,实在是靠自己想不明白了,希望有大佬解答。
你可以这样验证一下,你把截图中的代码注释掉,这样编译时就不会报你所提到的空指针错误了。
大概看了一下,你别的代码有可能也存在类似问题,你自己根据这个思路改改就好了。希望能帮到你。