-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathContents.swift
57 lines (50 loc) · 1.53 KB
/
Contents.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/*
Add Two Numbers
Tag: Linked List、 Math
https://leetcode.com/problems/add-two-numbers/description/
*/
public class ListNode {
public var val: Int
public var next: ListNode?
public init(_ val: Int) {
self.val = val
self.next = nil
}
}
/**
思路: 按位加, 处理好满10进1位即可
*/
class Solution {
func addTwoNumbers(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? {
var listHead: ListNode?
var addOneNext = false // 下一位进1
var listLastNode: ListNode?
var n1: ListNode? = l1
var n2: ListNode? = l2
while n1 != nil || n2 != nil {
let d1 = n1 != nil ? n1!.val : 0
let d2 = n2 != nil ? n2!.val : 0
var digitSum = d1 + d2 + (addOneNext ? 1 : 0) // 对应位置两数相加, 以及进位1
if n1 != nil {
n1 = n1!.next
}
if n2 != nil {
n2 = n2!.next
}
addOneNext = digitSum >= 10 // 两数相加大于10, 标记下一位进1
digitSum %= 10
if let lastNode = listLastNode {
lastNode.next = ListNode(digitSum)
listLastNode = lastNode.next
}
else { // 头节点
listHead = ListNode(digitSum)
listLastNode = listHead
}
}
if (addOneNext) { // 相同长度的两个单向链表 最后位置节点 满10进1
listLastNode!.next = ListNode(1)
}
return listHead
}
}