LeetCode 2. 两数相和

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 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
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 引言:用Js攻略leetcode中的算法,将会介绍自己的思路和注意点,一边学习一边愉快刷题呀。 问题1: 给定两个...
    mooory阅读 1,622评论 0 0
  • https://leetcode.windliang.cc/ 第一时间发布 题目描述(中等难度) 就是两个链表表示...
    windliang阅读 645评论 0 0
  • 题目:给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新...
    Gunther17阅读 983评论 0 1
  • 给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表...
    0Xday阅读 391评论 0 0
  • 2. 两数相加给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返...
    杏仁小核桃阅读 219评论 0 1