2 Add Two Numbers

2 Add Two Numbers

语言:java

题目:2 Add Two Numbers

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

考虑点:

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

原始代码1

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

优化代码

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