中等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