数组之两数相加


题目

https://leetcode-cn.com/problems/add-two-numbers/.


提示:以下是思路

一、分析具体情况

两个链表元素进行相加,生成一个新的链表,默认每个元素保存一位,大于一位数的值需要进行进位处理。

  • 两个链表长度相同

  • 两个链表长度不同
    在这里插入图片描述
    在这里插入图片描述

  • 两个元素相加之和大于9需要进位。
    在这里插入图片描述

二、具体情况操作

1.链表长度相同

按照简单的思路移动链表元素,将其值相加,赋值给新建的链表元素。

代码如下(示例):

let val1 = l1.val;
let val2 = l2.val;
total += val1 + val2;
l1 = l1.next;
l2 = l2.next;

2.链表长度不同

  • 相加结束条件
    当两个链表的长度不相同时,若按照上一步的操作会存在一个链表的所有元素已经相加完成了,链表移动到了null的位置,但另外一个链表还没有操作完所有的元素,并没有走到null的位置。所以,对元素操作结束的条件应该为两个链表都为空才停止操作。
  • 为空链表如何于不为空链表的值进行相加操作
    可以判断,若当前链表为空则赋为0,并且在移动链表元素的时候进行判断,若当前为空代表链表元素都遍历完成不再进行移动操作。

代码如下(示例):

while (l1 || l2) {
  let val1 = l1!=null ? l1.val : 0;
  let val2 = l2!=null ? l2.val : 0;
  total += val1 + val2;
  sum.next = new ListNode(total);
  total = total>= 10 ? 1 : 0;
  sum = sum.next;
  if (l1) {
     l1 = l1.next;
  }
  if (l2) {
     l2 = l2.next;
   }
}

3.进位情况

分析进位不难发现,默认每个元素保存一位的值,最大和为18。若和大于9,则将其除以10的余数保存,中间变量加1累加到下次元素求和中。需要注意的是,当两个链表都为空时,若保存进位值的中间变量不为0,则还需要继续操作,将进位的值保存到新的链表中。
最终代码:

var addTwoNumbers = function(l1, l2) {
    let header = new ListNode(0, undefined);
    let sum = header;
    let total = 0;
    while (total || l1 || l2) {
        let val1 = l1!=null ? l1.val : 0;
        let val2 = l2!=null ? l2.val : 0;
        total += val1 + val2;
        sum.next = new ListNode(total%10);
        total = total>= 10 ? 1 : 0;
        sum = sum.next;
        if (l1) {
            l1 = l1.next;
        }
        if (l2) {
            l2 = l2.next;
        }
    }
    return header.next;
	};
  }

总结

今天分析了一个简单的链表相加的问题,刚开始做的时候,觉得很简单,后来提交了几次发现其实还是有很多细节的问题需要去考虑,学会去思考不同情况下的问题。这是很细节的东西,往往不仅仅是把题目刷出来就可以了。我也发现自己的逻辑思维能力不太行,简单的题目也往往很考察你的逻辑能力,希望自己能坚持刷题,把刷过的每一道题都能用自己的想法分析清楚。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值