美文网首页
【算法练习leetcode篇】之链表 02.add-two-nu

【算法练习leetcode篇】之链表 02.add-two-nu

作者: 芒果加奶 | 来源:发表于2019-03-06 17:32 被阅读0次

    分类:链表

    题目:

    给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
    你可以假设除了数字 0 之外,这两个数字都不会以零开头。
    示例:
    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
    输出:7 -> 0 -> 8
    原因:342 + 465 = 807

    思路:

    1、新建链表 let head = new ListNode(-1)
    2、新建进位变量carried
    3、两个链表从头循环中,将每一项与carried相加放入新链表,计算新的carried

    我的答案:

    /**
     *
     * 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) {
      let p1 = l1; //l1
      let p2 = l2; //l2
      let head = new ListNode(-1); // 新链表的head
      let cur = head;
      let carried = 0; // 进位标志
      while (p1 || p2) {
        let a = p1 ? p1.val : 0; // 两个链表长度不对等时需要单出处理每一项
        let b = p2 ? p2.val : 0;
        cur.next = new ListNode((a + b + carried) % 10);
        carried = Math.floor((a + b + carried) / 10);
    
        cur = cur.next;
        p1 = p1 ? p1.next : null; //循环取两个链表的下一项,下一项可能为空
        p2 = p2 ? p2.next : null;
      }
      cur.next = carried ? new ListNode(1) : null; //循环结束最后一位大于10要进1
      return head.next;
    };
    
    

    相关文章

      网友评论

          本文标题:【算法练习leetcode篇】之链表 02.add-two-nu

          本文链接:https://www.haomeiwen.com/subject/rnexpqtx.html