Fork me on GitHub

Add Two Numbers

题目介绍

LeetCode 2. Add Two Numbers,题目的意思用两个非空的链表来表示两个非负整数,且链表顺序为数字倒序,求出两个数之和,返回和对应的链表。

解题思路

按位进行逐位相加,需要主要的是进位记录,以及两个数位数不匹配的情况下的计算。首先定义链表 Node 数据结构如下:

1
2
3
4
5
6
7
8
public class ListNode {
public var val: Int
public var next: ListNode?
public init(_ val: Int) {
self.val = val
self.next = nil
}
}

定义一个 headNode 作为初始值,循环相加,注意边界情况,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
func addTwoNumbers(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? {
let headNode = ListNode(0)
var p = l1, q = l2, curr = headNode
var carry = 0
while (p != nil || q != nil || carry != 0){
let x = (p != nil) ? p!.val : 0
let y = (q != nil) ? q!.val : 0
let sum = x + y + carry
carry = sum / 10
curr.next = ListNode(sum % 10)
curr = curr.next!
if (p != nil) {
p = p!.next
}
if (q != nil) {
q = q!.next
}
}
return headNode.next!
}
}

版权声明



Ivan’s Blog by Ivan Ye is licensed under a Creative Commons BY-NC-ND 4.0 International License.
叶帆创作并维护的叶帆的博客博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证

本文首发于Ivan’s Blog | 叶帆的博客博客( http://yeziahehe.com ),版权所有,侵权必究。

本文链接:http://yeziahehe.com/2017/10/10/AddTwoNumbers/