LeetCode 2.add two numbers

时间:2019-01-19
本文章向大家介绍LeetCode 2.add two numbers,主要包括LeetCode 2.add two numbers使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题目

两个非空链表代表两个非负实数,每一位按照倒序存储在链表的每个节点中,把两个数相加把结果作为链表返回。

思路

首先题目给了链表节点的数据结构,直接拿来用就行。
首先建立一个结果链表,先建立一个0节点当做表头。加法规则为对应的位相加,有进位加进位,和大于10进一位,小于10不进位。于是需要两个指针分别指示要进行加法的位,一个指针指示结果链表的位置。然后一个变量存进位。

然后开始进入循环,循环的判断条件很重要,若是条件为两个指针都不为空,则需要考虑较长的链表需要接到结果链表后面,细想的话短链表加到尽头最后的进位要加到长链表上,较为麻烦,若是条件为两个指针不都为空,即只要有一个不为空就继续加法,那么把短链表的相应位置看成0,加到尽头的进位也不需要考虑了,因此条件应设置为或,即只要有一个不为空就循环。

循环内开始进行加法,考虑到可能有链表的节点为空,所以在取值的时候要进行判断。两个加数定义两个变量,若加数节点为空,则变量的值为0,不为空则为对应的值,定义sum为两个加数相加再加上进位,相加的结果又会产生进位,进位的值在这里要小心,若sum>=10,则进位值为sum/10,若sum<10,则进位为0,这里判断一定要写完整。错误写法:if(sum >9 ) carry=sum/10;若只这么写,那么当sum<10时候,carry会继承上一次的值。然后存储当前位的值。新建一个节点并赋值,然后指针后移,这里要斟酌两者的顺序,这题这样做较为合适。然后两指针后移,后移要做判断,如果当前指针指向为null,则不后移。

最后考虑边界情况,例如5+5=10那么会多产生一位进位,若不进行处理,得到的结果将为0,所以最后要加上判断,若进位>0,则加入一个节点,值为进位的值。然后返回头结点。