没看清题,n和m 的范围是6次方以内还涉及不到大数,因为这两个相加最多结果就是一个7次方。但是利用大数相加的思路是没有问题的。先把链表转换成字符串,然后转化为大数相加的就可以了

public class Solution {
    /**
     * 
     * @param head1 ListNode类 
     * @param head2 ListNode类 
     * @return ListNode类
     */

public ListNode addInList (ListNode head1, ListNode head2) {
    // write code here
    if(head1==null || head2==null){
        return null;
    }
    StringBuffer sb1=new StringBuffer();
    StringBuffer sb2=new StringBuffer();
    helper(sb1,head1);
    helper(sb2,head2);
    StringBuffer resSb=strPlus(sb1,sb2);
    int [] resArray=str2int(resSb);
    ListNode head=intArray2ListNode(resArray);
    return head;
}

public void helper(StringBuffer sb,ListNode head){ //链表变字符串,注意逆序
    ListNode p=head;
    while(p!=null){
        sb.append(p.val+"");
        p=p.next;
    }
    sb=sb.reverse();
}

public StringBuffer strPlus(StringBuffer sb1,StringBuffer sb2){ //大数相加
    String str1=sb1.toString();
    String str2=sb2.toString();
    int maxLength=str1.length()>str2.length()?str1.length():str2.length();
    int [] arr1=new int[maxLength+1];
    int [] arr2=new int[maxLength+1];
    int [] carry=new int [maxLength+1];
    int [] res=new int[maxLength+1];
    for(int i=0;i<str1.length();i++){
        arr1[i]=str1.charAt(i)-'0';
    }
    for(int i=0;i<str2.length();i++){
        arr2[i]=str2.charAt(i)-'0';
    }
    for(int i=0;i<maxLength+1;i++){
        int tmp=arr1[i]+arr2[i];
        if(i!=0){
            tmp+=carry[i-1];
        }
        if(tmp-10>=0){
            tmp-=10;
            carry[i]=1;
        }else{
            carry[i]=0;
        }
        res[i]=tmp;
    }
    StringBuffer sb=new StringBuffer();
    for(int i=0;i<res.length;i++){
        if(i==res.length-1 && res[i]==0){
            continue;
        }
        sb.append(res[i]+"");
    }
    return sb.reverse();
}

public int [] str2int(StringBuffer sb){ //字符串变int数组
    char [] str=sb.toString().toCharArray();
    int [] res=new int[str.length];
    for(int i=0;i<res.length;i++){
        res[i]=str[i]-'0';
    }
    return res;
}

public ListNode intArray2ListNode(int [] array){//int 数组生成链表
    ListNode head=null;
    ListNode p=null;

    for(int i=0;i<array.length;i++){
        ListNode node=new ListNode(array[i]);
        if(head==null){
            head=node;
            p=head;
        }else{
            p.next=node;
            p=p.next;
        }
    }
    return head;
}

}