Add Two Numbers

@paddingme 2018-09-07 08:41:01发表于 paddingme/shipping Algorithms

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Example:

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.
/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */


/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */
const addTwoNumbers = (l1, l2)=> {
  let a = l1
  let b = l2
  let result = new ListNode(0)
  let temp = result
  let carry = 0
  
  while(a || b) {
    let x = a ? a.val: 0
    let y = b ? b.val : 0
    let sum = x + y + carry
    carry = Math.floor( sum / 10)
    temp.next = new ListNode(sum % 10)
    
    if (a) a = a.next
    if (b) b = b.next
    
    temp = temp.next
  }
  
  if (carry > 0) {
    temp.next = new ListNode(carry) 
  }
  
  return result.next
}