leetcode上两数相加的问题,想知道为什么我的解法一直报空指针异常,求大佬帮忙看看,研究很久了

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;
    }

问题我用备注写在代码里了,实在是靠自己想不明白了,希望有大佬解答。

图片说明

你可以这样验证一下,你把截图中的代码注释掉,这样编译时就不会报你所提到的空指针错误了。
大概看了一下,你别的代码有可能也存在类似问题,你自己根据这个思路改改就好了。希望能帮到你。