import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param head1 ListNode类
     * @param head2 ListNode类
     * @return ListNode类
     */
    public ListNode addInList (ListNode head1, ListNode head2) {
        // write code here
        ListNode reverseHead1 = reverseList(head1);
        
        ListNode reverseHead2 = reverseList(head2);
        //System.out.println(reverseHead2.val);
        ListNode sumList = new ListNode(0);
        ListNode sumListHead = sumList;
        while (reverseHead1 != null || reverseHead2 != null) {
            if (reverseHead1 != null && reverseHead2 != null) {
                int sum = reverseHead1.val + reverseHead2.val;
                sumList.val += sum;
                if (sumList.val >= 10) {
                    //进一
                    ListNode newNode = new ListNode(1);
                    sumList.next = newNode;
                    sumList.val -= 10;
                    sumList = newNode;
                } else {
                    //不需要进一,也需要创建一个新的节点
                    ListNode newNode = new ListNode(0);
                    sumList.next = newNode;
                    sumList = newNode;
                }
                reverseHead1 = reverseHead1.next;
                reverseHead2 = reverseHead2.next;
            } else if (reverseHead2 == null) {
                int sum = reverseHead1.val;
                sumList.val += sum;
                //进一
                if (sumList.val >= 10) {
                    //进一
                    ListNode newNode = new ListNode(1);
                    sumList.next = newNode;
                    sumList.val -= 10;
                    sumList = newNode;
                } else {
                    //不需要进一,也需要创建一个新的节点
                    ListNode newNode = new ListNode(0);
                    sumList.next = newNode;
                    sumList = newNode;
                }
                reverseHead1 = reverseHead1.next;
            } else if (reverseHead1 == null) {
                int sum = reverseHead2.val;
                sumList.val += sum;
                //进一
                if (sumList.val >=10) {
                    //进一
                    ListNode newNode = new ListNode(1);
                    sumList.next = newNode;
                    sumList.val -= 10;
                    sumList = newNode;
                } else {
                    //不需要进一,也需要创建一个新的节点
                    ListNode newNode = new ListNode(0);
                    sumList.next = newNode;
                    sumList = newNode;
                }
                reverseHead2 = reverseHead2.next;
            }
        }
        /*while(sumListHead!=null){
            System.out.println(sumListHead.val);
            sumListHead = sumListHead.next;
        }*/
        //反转,再去除结果链表里开头的0
        sumListHead = reverseList(sumListHead);
        while (sumListHead.val == 0) {
            if(sumListHead == null ) break;
            sumListHead = sumListHead.next;
        }
        return sumListHead;
    }

    ListNode reverseList (ListNode head) {
        if (head == null) return head;
        if (head.next == null) return head;
        ListNode last, current, next;
        last = head;
        current = head.next;
        next = current.next;
        //将反转以后的尾节点指向null
        last.next = null;
        while (current != null) {
            current.next = last;
            last = current;
            current = next;
            if (next != null) next = next.next;
        }
        return last;
    }
}

感觉解法有些繁琐。

思路是将两个链表一起反转,然后按位想加,用一个新的链表存储和,相加之和大于等于10的位需要进一。

反转的时候,注意需要将原头节点的next设置为null。

在处理进一操作时,可以用以下代码简化if判断

ListNode newNode = new ListNode(0);
newNode.val = sumList.val/10;
sumList.val = sumList.val%10;
sumList.next = newNode;
sumList = newNode;