LeetCode 2. 两数相和
2019-01-05 本文已影响29人
笙绳省盛
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
解法:低位相加,相加之和除10算出是否需要进位,相加之和取余为下一个结点的值,注意再最后要判断额外进位的情况。
func addTwoNumbers(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? {
//初始化一个哑节点
let listHead = ListNode.init(0)
var p = l1
var q = l2
var currentList = listHead
var carry = 0
while p != nil || q != nil {
let m = p?.val ?? 0
let n = q?.val ?? 0
let sum = m + n + carry
carry = sum / 10
currentList.next = ListNode.init(sum % 10)
currentList = currentList.next!
p = p?.next ?? nil
q = q?.next ?? nil
}
if carry > 0{
currentList.next = ListNode.init(carry)
}
return listHead.next
}
class ListNode {
var val: Int
public var next: ListNode?
public init(_ val: Int) {
self.val = val
self.next = nil
}
}