Leet code(两数相加) 前端刷题解法记录与思考

329 阅读1分钟

两数之和是一个链表题,假设例题为[9,4,3] [5,6,4] 则输入[4,1,8],其实就是左边相加,遇10进1的解法

image.png


/**
 * 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 list = new ListNode(0)
   //考虑到某一位相加会大于10 将大于10 进1 保存起来
   let carry = 0
   //保存头链表的位置用于最后的链表返回
   let hear = list
   //循环l1和l2  如果有进位的话则继续执行循环
   while(l1||l2||carry){
       //因为有长度不一致的情况,长度不一致则强行补0
       let val1 = l1?l1.val:0
       let val2 = l2?l2.val:0
       let count = val1+val2+carry  // 进行求和
       //判断是否有进位
       carry = count>=10?1:0
       list = list.next = new ListNode(count % 10)
       //未结束 则循环执行
       if(l1) l1 = l1.next
       if(l2) l2 = l2.next
   }
   return hear.next
   
};

完成

image.png