题目
两个非空链表代表两个非负实数,每一位按照倒序存储在链表的每个节点中,把两个数相加把结果作为链表返回。
思路
首先题目给了链表节点的数据结构,直接拿来用就行。
首先建立一个结果链表,先建立一个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,则加入一个节点,值为进位的值。然后返回头结点。