function ReverseList(head)
{
    if (head === null) return head;
    let curr = head;
    let pre = null;
    let next = null;
    while (curr) {
        next = curr.next;
        curr.next = pre;
        pre = curr;
        curr = next;
    }
    head = pre;
    return head;    
}


function addInList( head1 ,  head2 ) {
    // 链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。
    if (head1 === null) return head2;
    if (head2 === null) return head1;
    
    let l1 = ReverseList(head1);
    let l2 = ReverseList(head2);

    let dummy = new ListNode(-1);
    let p = dummy;
    
    let carry = 0; 
    
    while (l1 || l2) {
        let sum = carry;
        if (l1) { 
            sum += l1.val
            l1 = l1.next;
        }
        if (l2) {
            sum += l2.val
            l2 = l2.next;
        } 
        carry = Math.floor(sum / 10);
        let val = sum % 10; 
        p.next = new ListNode(val);
        p = p.next;
    } 
    
    if (carry > 0) p.next = new ListNode(carry);
    
    return ReverseList(dummy.next);
}