2 Add Two Numbers

2 Add Two Numbers

语言:java

题目:这里写图片描述

即给定两个非负整数的链表,注意两个链表存放数是倒着存的。求出两数之和,并且以链表的形式输出。

考虑点:

  • 1用两个链表存放两个数,每个节点存放数的每一位。
  • 2当两个数等长时(即链表等长时),相加时注意保存进位,即进位要加在下一位两个数相加的结果上。
  • 3 当两个数不等长时,和的高位结果即为不为空的数的高位。即将不为空的链表节点直接复制即可。
  • 4 若最高位相加结果有进位,注意结果会多出一位,且该位值一定为1.

原始代码1

这里写图片描述
考虑的思路是:
* 1)两个链表是否为空,若不全为空,则进行相加计算。
* 2)若两个链表的当前节点不为空,则取数值,赋值为val1,val2;
* 3)和链表l3的节点值=(进位+val1+val2)%10,(相加结果大于10时,应该保留个位,十位作为进位)
* 4)如果此时两个链表还存在下一个节点,或者存在进位,那么和链表也会存在下一个节点,且下一个节点的值首先赋值为进位值。相反,如果两个链表都不存在下一个节点了,且没有进位了,那么和链表一定不存在下一个节点,则无需生成next节点。
* 结果:耗时61ms,超过30%的人。时间需要进一步优化。

优化代码

这里写图片描述
注意改进点:
1)将上一次进位保存后和当前链表节点的值相加
2)注意结果保存到写一个节点,也就是说链表的首节点为空。
3) 先将相加的结果放在下一个节点,再将指针移到下一个节点,这样避免了最后一位操作时,生成多余的节点。
* 结果:耗时54ms,打败65%左右,等待进一步优化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值