美文网首页leetcode刷题
LeetCode 2. 两数相和

LeetCode 2. 两数相和

作者: 笙绳省盛 | 来源:发表于2019-01-05 10:02 被阅读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
        }
    }
    

    相关文章

      网友评论

        本文标题:LeetCode 2. 两数相和

        本文链接:https://www.haomeiwen.com/subject/kthrrqtx.html