leetCode第二题

70 阅读1分钟

题目:

  function ListNode(val, next) {
      this.val = (val===undefined ? 0 : val)
      this.next = (next===undefined ? null : next)
  }
// 第一种方式  其实和第二种一样的
// (2->4->3)+(5->6->4) = (7->0->8),根据加法的计算过程我们知道首先从低位开始算起,也就是说应该先计算2+5=7.
    // 1. 确定链表的头部 以及 需要返回 和 如果相加大于10的就进位的初始值
    // 2. 取出“+”左右两边两个数的最低位
    let head = null, tail = null, carry = 0;
    while (carry || l1 || l2) {
        // 这里做一个三元判断 因为当两个链表长度不一致时  需要在前面补0
        let val1 = l1 ? l1.val : 0;
        let val2 = l2 ? l2.val : 0;
        // 相加
        const num = val1 + val2 + carry;
        carry = num >= 10 ? 1 : 0;
        if (!head) {
            head = tail = new ListNode(num % 10)
        } else {

            tail.next = new ListNode(num % 10);
            tail = tail.next
        }

        if (l1) l1 = l1.next;
        if (l2) l2 = l2.next;

    }

    return head
    

     let head = new ListNode('0'), tail = head, carry = 0;
    while (carry || l1 || l2) {
        // 这里做一个三元判断 因为当两个链表长度不一致时  需要在前面补0
        let val1 = l1 ? l1.val : 0;
        let val2 = l2 ? l2.val : 0;
        // 相加
        const num = val1 + val2 + carry;
        carry = num >= 10 ? 1 : 0;
        tail.next = new ListNode(num % 10);
        tail = tail.next

        if (l1) l1 = l1.next;
        if (l2) l2 = l2.next;

    }

    return head.next //返回计算结果,之所以用head.next是因为head中保存的第一个节点是刚开始定义的“0”