Skip to content

Commit bd00c47

Browse files
author
hongqima
committed
添加两数相加解法
1 parent e459b8a commit bd00c47

File tree

2 files changed

+60
-1
lines changed

2 files changed

+60
-1
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* public class ListNode {
4+
* public var val: Int
5+
* public var next: ListNode?
6+
* public init(_ val: Int) {
7+
* self.val = val
8+
* self.next = nil
9+
* }
10+
* }
11+
*/
12+
13+
/**
14+
执行用时 : 72 ms, 在Add Two Numbers的Swift提交中击败了93.53% 的用户
15+
内存消耗 : 21.5 MB, 在Add Two Numbers的Swift提交中击败了5.14% 的用户
16+
17+
1. 使用flag标识当前是否需要进位
18+
2. 共同遍历两个链表,取两个结点和flag的和,并重设flag
19+
3. 处理比较长的链表
20+
4. 最终处理flag
21+
*/
22+
func addTwoNumbers(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? {
23+
var flag = 0
24+
var p = l1
25+
var q = l2
26+
var dummy = ListNode(-1)
27+
var rear = dummy
28+
while p != nil && q != nil {
29+
let val = p!.val + q!.val + flag
30+
let newNode = ListNode(val % 10)
31+
flag = val / 10
32+
rear.next = newNode
33+
rear = newNode
34+
p = p!.next
35+
q = q!.next
36+
}
37+
while p != nil {
38+
print(p!.val)
39+
let val = p!.val + flag
40+
let newNode = ListNode(val % 10)
41+
flag = val / 10
42+
rear.next = newNode
43+
rear = newNode
44+
p = p!.next
45+
}
46+
47+
while q != nil {
48+
let val = q!.val + flag
49+
let newNode = ListNode(val % 10)
50+
flag = val / 10
51+
rear.next = newNode
52+
rear = newNode
53+
q = q!.next
54+
}
55+
if flag != 0 {
56+
rear.next = ListNode(1)
57+
}
58+
return dummy.next
59+
}

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
| 题号 | 题目 | 难度 | Swift | Python | Java | C/C++ | OC |
1212
| --- | ---- | --- | ----- | ------ | ---- | ----- | -- |
1313
| 1 | [两数之和](https://leetcode-cn.com/problems/two-sum) | 简单 | [Swift](0001-两数之和/Swift) | | | | |
14-
| 2 | [两数相加](https://leetcode-cn.com/problems/add-two-numbers) | 中等 | | | | | |
14+
| 2 | [两数相加](https://leetcode-cn.com/problems/add-two-numbers) | 中等 | [Swift](0002-两数相加/Swift) | | | | |
1515
| 3 | [无重复字符的最长子串](https://leetcode-cn.com/problems/longest-substring-without-repeating-characters) | 中等 | | | | | |
1616
| 4 | [寻找两个有序数组的中位数](https://leetcode-cn.com/problems/median-of-two-sorted-arrays) | 困难 | | | | | |
1717
| 5 | [最长回文子串](https://leetcode-cn.com/problems/longest-palindromic-substring) | 中等 | | | | | |

0 commit comments

Comments
 (0)