題目簡述:【其實(shí)就是從leetcode里面抄過來的題】
給出兩個非空?的鏈表用來表示兩個非負(fù)的整數(shù)。其中偎窘,它們各自的位數(shù)是按照逆序的方式存儲的购公,并且它們的每個節(jié)點(diǎn)只能存儲一位數(shù)字蕴侣。
如果,我們將這兩個數(shù)相加起來数苫,則會返回一個新的鏈表來表示它們的和狭归。
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)輸出:7 -> 0 -> 8原因:342 + 465 = 807
解題思路:
如果鏈表但長度是給定的話,我們可以將鏈表里的數(shù)字拿出來組合成一個數(shù)字來進(jìn)行相加文判,相加之后對于輸出的結(jié)果过椎,通過/10的方式依次取出。但是鏈表的長度是未知的戏仓,所以我們不能用這么取巧的方式來解題疚宇。【個人想法赏殃,我看到有個大神確實(shí)這樣做了敷待,是我狹隘了,其實(shí)是一樣的遞歸思路】
其實(shí)我看到之后也是沒思路的仁热,是參考了大家的解題方法榜揖,現(xiàn)在只是為了記錄一下,加深自己的印象抗蠢。
還是一位一位去相加举哟,如果有進(jìn)位就同步到下一位上,由于鏈表可以通過.next拿到下一個節(jié)點(diǎn)的值迅矛,所以我們可以用到遞歸妨猩,只用寫第一位的加法規(guī)則,每一個next都進(jìn)行套用秽褒,最后輸出結(jié)果壶硅。
鏈表的定義:
鏈表是由一個個節(jié)點(diǎn)組合起來的一個數(shù)據(jù)鏈,抽象出來的結(jié)構(gòu)如下圖销斟,轉(zhuǎn)自https://www.cnblogs.com/king-ding/p/pythonchaintable.html庐椒。這里十分詳細(xì),還講了列表的創(chuàng)建和操作蚂踊,十分適合我這種小白0 0
代碼實(shí)現(xiàn):
```
#?Definition?for?singly-linked?list.
#?class?ListNode:
#?????def?__init__(self,?x):
#?????????self.val?=?x
#?????????self.next?=?None
class?Solution:
????def?addTwoNumbers(self,?l1:?ListNode,?l2:?ListNode)?->?ListNode:
????????return?self.addtwo(l1,l2)
????def?addtwo(self,l1,l2,sum=0):
????????if?not?l1?and?not?l2?and?sum==0:
????????????return?None? ? ? ?#這里一定不能寫成NULL
????????l1_val?=?l1.val?if?l1?else?0? ?#這里的三目運(yùn)算符约谈,意思是如果l1不為空,就取它的值,否則就是0
????????l2_val?=?l2.val?if?l2?else?0
????????l1_next=?l1.next?if?l1 else None #這里是取下一個節(jié)點(diǎn)
????????l2_next=?l2.next?if?l2 else None
????????sum1?=?l1_val?+?l2_val?+?sum
????????if?sum1?>=?10:
????????????result?=?ListNode(sum1?-10?)
????????????result.next?=?self.addtwo(l1_next,l2_next,1)
????????else?:
????????????result?=?ListNode(sum1)
????????????result.next?=?self.addtwo(l1_next,l2_next)
? ? ? ?return result
```