import java.util.*;
public class Solution {

    public ListNode addInList (ListNode head1, ListNode head2) {

        if (head1 == null && head2 == null) return null;
        if (head1 == null) return head2;
        if (head2 == null) return head1;

        // 先将链表反转
        head1 = rever(head1);
        head2 = rever(head2);

        ListNode c1 = head1;
        ListNode c2 = head2;
        // 新头节点
        ListNode phead = new ListNode(0);
        ListNode ret = phead;

        int carry = 0;//进位

        //进位也要不等于0
        while (c1 != null || c2 != null || carry != 0) {
            int val1 = c1 == null ? 0 : c1.val;
            int val2 = c2 == null ? 0 : c2.val;
            int t = val1 + val2 + carry;
            // 取进位
            carry = t / 10;
            int g = t % 10;
            ListNode tmp = new ListNode(g);
            phead.next = tmp;
            phead = phead.next;

            // 不为空时才能后移
            if(c1!=null)c1 = c1.next;
            if(c2!=null)c2 = c2.next;
        }

        // 此处不能用phead,phead已经移到最后了
        return rever(ret.next);
    }

    public ListNode rever(ListNode head){
        if(head ==null) return null;
        ListNode newHead = null;
        ListNode tmp = head;
        ListNode cur = head;

        while(cur!=null){
            tmp = cur.next;
            cur.next = newHead;
            newHead = cur;
            cur = tmp;
        }
        return newHead;
    }
}