中等node
給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,而且它們的每一個節點只能存儲 一位 數字。 若是,咱們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。 您能夠假設除了數字 0 以外,這兩個數都不會以 0 開頭。swift
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
緣由:342 + 465 = 807
複製代碼
來源:力扣(LeetCode) 連接:leetcode-cn.com/problems/ad… 著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。bash
swift網絡
這題就像在小學的時候學習筆算數學加減法。 好比計算123 + 678
,首先個位相加,3 + 8 = 11
,等於10 + 1
,溢出了1
,因而十位數相加的時候變爲2 + 8 + 1 = 10
,以此類推。咱們能夠在計算的時候都假設上一位溢出了n / 10
,因而每位的計算變成了 a + b + sumFlow
。學習
須要注意的是:首位的sumFlow
值爲0
,在兩個數字位數長度不一樣的時候,給短的數字高位補0
,在計算到最後一位的時候,要判斷是否還有上一位的sumFlow
,若是有的話須要在最高位繼續補上。ui
而後就是配合鏈表的使用。spa
代碼以下:code
class Solution {
func addTwoNumbers(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? {
var listOne = l1, listTwo = l2, sumList = ListNode(0)
var sumFlow : Int = 0
var node = sumList
while (listOne != nil) || (listTwo != nil) {
let numberSum = (listOne?.val ?? 0) + (listTwo?.val ?? 0)
var sum = numberSum + sumFlow
if sum >= 10 {
sumFlow = sum / 10
sum = sum - 10
}
else {
sumFlow = 0
}
let listNode = ListNode(sum)
node.next = listNode
node = node.next!
listOne = listOne?.next
listTwo = listTwo?.next
}
if sumFlow > 0 {
node.next = ListNode(sumFlow)
}
return sumList.next
}
}
複製代碼
這裏用到的鏈表是最初級的操做,挺有意思的,其餘沒啥太大難度。leetcode