方法:先用栈来实现倒序,然后创建新链表

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
        Stack<Integer> stack1 = new Stack<>();
        Stack<Integer> stack2 = new Stack<>();
        while (head1 != null || head2 != null) {
            if (head1 != null) {
                stack1.add(head1.val);
                head1 = head1.next;
            }
            if (head2 != null) {
                stack2.add(head2.val);
                head2 = head2.next;
            }
        }

        ListNode newHead = new ListNode(-1);    //虚拟头节点
        int carry = 0;

        //这里设置carry!=0,是因为当st1,st2都遍历完时,如果carry=0,就不需要进入循环了
        while (!stack1.isEmpty() || !stack2.isEmpty() || carry != 0) {
            int a = 0, b = 0;
            if (!stack1.isEmpty()) a = stack1.pop();
            if (!stack2.isEmpty()) b = stack2.pop();
            int sum = a + b + carry;    //每次的和应该是对应位相加再加上进位
            ListNode cur = new ListNode(sum % 10);    //对累加的结果取余
            //头插法(每次都插入最开始的位置,避免顺序打乱)
            cur.next = newHead.next;
            newHead.next = cur;
            carry = sum / 10;    //看是否有进位
        }
        return newHead.next;
    }
}