Skip to content

LeetCode题解:2. 两数相加,迭代,JavaScript,详细注释 #369

Description

@chencl1986

原题链接:2. 两数相加

解题思路:

  1. 使用一个新链表存储结果,node代表新链表的每个节点。
  2. 创建一个dummy节点,dummy.next指向新链表的头结点。
  3. 使用plus变量,缓存两个值加和后,需要进位的结果,可为01
  4. 同时遍历l1l2,将其想加结果存储在node中,node.val = l1.val + l2.val + plus
/** * @param {ListNode} l1 * @param {ListNode} l2 * @return {ListNode} */varaddTwoNumbers=function(l1,l2){letdummy=newListNode();// 创建虚拟节点,dummy.next指向新链表的头结点letnode=dummy;// 使用node缓存新链表的每个节点letplus=0;// 用于存储出现进位时,所需家数// 不断迭代,直到两个链表都清空while(l1||l2){// 创建一个新节点,用于存储结果// 在循环开始时创建,避免迭代结束时,多创建出一个节点node.next=newListNode();// 将node向前移动一位,新的值存储在当前节点node=node.next;// 缓存两个节点的值,节点为空时,值为0constx=l1 ? l1.val : 0consty=l2 ? l2.val : 0// 计算当前位置两数相加之和,如果上一位之和出现进位,plus为1constres=x+y+plus;// 如果结果大于10,当前节点仅存储一位数字if(res>=10){// 存储个位数node.val=res-10;// 将进位数字缓存,供下次迭代使用plus=1;}else{// 结果小于10,直接存储即可node.val=res;// 将进位数字置0plus=0;}// 将两个链表向后移动一位l1&&(l1=l1.next);l2&&(l2=l2.next);}// 如果还需要进位,则为链表创建一个值为1的新节点if(plus){node.next=newListNode(1);}// 将链表返回,dummy.next指向的是新链表的头结点returndummy.next;};

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions