原题:Youaregiventwonon-emptylinkedlistsrepresentingtwonon-negativeintegers.Thedigitsarestoredinreverseorderandeachoftheirnodescontainasingledigit.Addthetwonumbersandreturnitasalinkedlist.
Youmayassumethetwonumbersdonotcontainanyleadingzero,exceptthenumber0itself.
Example:
Input:(2->4->3)+(5->6->4)Output:7->0->8Explanation:342+465=807.
翻译:这里有两组代表非负数(如:342)的链表,是以相反的方向来存放每一位的(如:2->4->3),问:将这个两个链表代表的非负数相加,然后返回一个新链表代表这个结果。
举例:输入:(2->4->3)+(5->6->4)输出:7->0->8结果:342+465=807.
一,偶的错误思路:假设输入的是链表a和链表b
1.先计算出a,b代表的数字N1,N2.然后计算出两者的和:N1+N2=N3.算出N3每一位的数字,然后将反向取得链表c
为什么上面的方案不行?
如果单纯从思路来看,是可行的,但是会遇到整数溢出的问题,试想如果输入的链表是[1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1]的时候,上面思路的第一步在转换链表到整数的时候就会出错。
二,那正确解法是:
1.将两个链表代表的值从头开始相加,得到新链表的元素2.每一次相加得到的值如果大于9,就在后面的相加中额外加13.如果加到两个链表的尾部,还有进位,就额外多创建一个新链表的元素放到末尾
总结:在对数据进行基本的运算法则时,要多从数据结构的角度来考虑问题,假如一开始就考虑到链表没有整型溢出的缺点,就少走了弯路