以链表的形式添加两个数字

时间:2018-12-29 00:20:12

标签: javascript algorithm

我是javascript新手,正在尝试解决此问题:

  

您将获得两个非空链表,它们代表两个非负数   整数。这些数字以相反的顺序存储,每个数字   节点包含一个数字。将两个数字相加,然后将其返回为   链表。

这是我的解决办法:

addTwoNumbers = (l1, l2) => {
    let carry = 0;
    let p = curr = new ListNode(0);
    while (l1 || l2) {
        sum = 0;
        if (l1 && l2) {
            sum = l1.val + l2.val + carry;
        } else if (l1) {
            sum = l1.val + carry;
        } else if (l2) {
            sum = l2.val + carry;
        }
        carry = sum % 10;
        sum = sum / 10;
        curr.next = new ListNode(sum);
        curr = curr.next;
    }
    return p.next

};

此处是LL的定义

class ListNode{
    constructor(val){
        this.val = val;
        this.next = null;
    }

}

进入无限循环。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

尝试以下代码:

addTwoNumbers = (l1, l2)=> {
  let carry = 0;
  var curr;
  let p = (curr = new ListNode(0));
  var sum = 0;
  while (l1 || l2) {

    if (l1 && l2) {
      sum = l1.val + l2.val + carry;
      l1=l1.next;
      l2=l2.next;
    } else if (l1) {
      sum = l1.val + carry;
      l1=l1.next;
    } else if (l2) {
      sum = l2.val + carry;
      l2=l2.next;
    }

    carry = Math.floor(sum / 10);
    sum = Math.floor(sum) % 10;
    curr.next = new ListNode(sum);
    curr = curr.next;

  }

  if(carry===1)
    curr.next=new ListNode(carry);
  return p.next;
};

注意事项:

  1. 您必须先声明curr,然后再声明sum
  2. 您必须在每个和之后更新l1l2参考。
  3. 要获得正确的carrysum,您应该注意/%之间的区别,而且js中的number与其他的不同强类型语言,例如java
  4. while循环之后,我们需要一个附加的逻辑来处理左边的carry.