iwfe / leetcode

3 stars 0 forks source link

2. Add Two Numbers #2

Open lancui1110 opened 7 years ago

lancui1110 commented 7 years ago

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.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
lancui1110 commented 7 years ago
/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */
var addTwoNumbers = function(l1, l2) {
  var add = function (ln1, ln2, jin, resArr) {
    if (ln1 === null && ln2 === null) {
        if(jin <= 0) return
        ln1 = new ListNode(0)
        ln2 = new ListNode(0)
    }
    if (ln1 === null && ln2 !== null) ln1 = new ListNode(0)
    if (ln2 === null && ln1 !== null) ln2 = new ListNode(0)

    var v1 = ln1.val, v2 = ln2.val
    var sum = v1 + v2 + jin, yu = sum%10

    // 加入结果
    jin = sum >= 10 ? 1 : 0
    resArr.next = new ListNode(yu)
    resArr = resArr.next

    add(ln1.next, ln2.next, jin, resArr)
  }

  var resArr = new ListNode(0)
  add(l1, l2, 0, resArr)
  return resArr.next
};
evelynlab commented 7 years ago

//思路:依次将l1,l2的val相加,再加上来自上一位的carry, 直到l1或l2的next为0,或者carry =0 结束。 var addTwoNumbers = function (l1, l2) { let sum = 0, carry = 0; let list = new ListNode(0); let result = list while (l1||l2||carry>0){

    sum=0;
    if(l1!==null){
        sum +=l1.val;
        l1=l1.next;

    }
    if (l2!==null){
        sum +=l2.val;
        l2=l2.next;
    }
    sum+=carry;
    carry = parseInt(sum/10);
    list.next = new ListNode(sum%10); //存储结果
    list = list.next;
}
return result.next

};