先反转再相加再反转

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param head1 ListNode类 
     * @param head2 ListNode类 
     * @return ListNode类
     */
    public ListNode addInList (ListNode head1, ListNode head2) {
        // write code here
        if(head1==null){
            return head2;
        }
        if(head2==null){
            return head1;
        }
        ListNode newHead1=reverseNode(head1);
        ListNode newHead2=reverseNode(head2);
        ListNode cur1=newHead1;
        ListNode cur2=newHead2;
        int sum=0;
        int shi=0;
        int ge=0;
        ListNode yummy=new ListNode(-1);
        ListNode pre=yummy;
        while(cur1!=null&&cur2!=null){
            sum+=cur1.val+cur2.val;
            shi=sum/10;
            ge=sum%10;
            ListNode cur=new ListNode(ge);
            pre.next=cur;
            pre=cur;
            sum=sum/10;
            cur1=cur1.next;
            cur2=cur2.next;
        }
        while(cur1!=null){
            sum+=cur1.val;
            shi=sum/10;
            ge=sum%10;
            ListNode cur=new ListNode(ge);
            pre.next=cur;
            pre=cur;
            sum=sum/10;
            cur1=cur1.next;
        }
       while(cur2!=null){
            sum+=cur2.val;
            shi=sum/10;
            ge=sum%10;
            ListNode cur=new ListNode(ge);
            pre.next=cur;
            pre=cur;
            sum=sum/10;
            cur2=cur2.next;
        }
        return reverseNode(yummy.next);
    }

    //反转链表
    public ListNode reverseNode(ListNode head){
        if(head==null||head.next==null){
            return head;
        }
        ListNode dummy=new ListNode(-1);
        dummy.next=head;
        ListNode pre=dummy;
        while(head.next!=null){
            ListNode next=head.next;
            head.next=next.next;
            next.next=pre.next;
            pre.next=next;
        }
        return dummy.next;
    }
}