Skip to content

Commit ed8fcb7

Browse files
committed
添加py和js,添加注释
1 parent ea1335f commit ed8fcb7

File tree

1 file changed

+87
-13
lines changed

1 file changed

+87
-13
lines changed

animation-simulation/链表篇/面试题 02.05. 链表求和.md

Lines changed: 87 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,11 @@
5555

5656
了解了思路,但是想完全实现代码也不是特别容易,这里需要注意的三个点就是,
5757

58-
1.我们需要根据两个链表的长度,不断对新链表添加节点
58+
1. 我们需要根据两个链表的长度,不断对新链表添加节点
5959

60-
2.需要创建一个变量用来保存进位值。
60+
2. 需要创建一个变量用来保存进位值。
6161

62-
3.当跳出循环之后,需要根据进位值来判断需不需要再对链表长度加1.
62+
3. 当跳出循环之后,需要根据进位值来判断需不需要再对链表长度加1
6363

6464
这三条可以结合代码理解进行。
6565

@@ -78,8 +78,8 @@ Java Code:
7878
```java
7979
class Solution {
8080
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
81-
//返回链表
82-
ListNode nList = new ListNode(-1);
81+
//待会儿要返回的链表
82+
ListNode nList = new ListNode(-1);//虚拟头节点
8383
ListNode tempnode = nList;
8484
//用来保存进位值,初始化为0
8585
int summod = 0;
@@ -92,7 +92,7 @@ class Solution {
9292
int sum = l1num+l2num+summod;
9393
//更新进位值,例18/10=1,9/10=0
9494
summod = sum/10;
95-
//新节点保存的值,18 % 8=2,则添加2
95+
//新节点保存的值,18% 8=2,则添加2
9696
sum = sum%10;
9797
//添加节点
9898
tempnode.next = new ListNode(sum);
@@ -106,10 +106,10 @@ class Solution {
106106
}
107107
}
108108
//最后根据进位值判断需不需要继续添加节点
109-
if (summod == 1) {
109+
if (summod != 0) {
110110
tempnode.next = new ListNode(summod);
111111
}
112-
return nList.next;
112+
return nList.next;//去除-1节点
113113
}
114114
}
115115
```
@@ -120,8 +120,8 @@ C++ Code:
120120
class Solution {
121121
public:
122122
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
123-
//返回链表
124-
ListNode * nList = new ListNode(-1);
123+
//待会儿要返回的链表
124+
ListNode * nList = new ListNode(-1);//虚拟头节点
125125
ListNode * tempnode = nList;
126126
//用来保存进位值,初始化为0
127127
int summod = 0;
@@ -134,7 +134,7 @@ public:
134134
int sum = l1num + l2num + summod;
135135
//更新进位值,例18/10=1,9/10=0
136136
summod = sum / 10;
137-
//新节点保存的值,18 % 8=2,则添加2
137+
//新节点保存的值,1 %8=2,则添加2
138138
sum = sum % 10;
139139
//添加节点
140140
tempnode->next = new ListNode(sum);
@@ -148,11 +148,85 @@ public:
148148
}
149149
}
150150
//最后根据进位值判断需不需要继续添加节点
151-
if (summod == 1) {
151+
if (summod != 0) {
152152
tempnode->next = new ListNode(summod);
153153
}
154-
return nList->next;
154+
return nList->next;//去除-1节点
155155
}
156156
};
157157
```
158158
159+
JS Code:
160+
161+
```js
162+
var addTwoNumbers = function(l1, l2) {
163+
//待会儿要返回的链表
164+
let nList = new ListNode(-1);//虚拟头节点
165+
let tempnode = nList;
166+
//用来保存进位值,初始化为0
167+
let summod = 0;
168+
while (l1 || l2) {
169+
//如果l1的链表为空则l1num为0,若是不为空,则为链表的节点值
170+
//判断是否为空,为空就设为0
171+
let l1num = l1 === null ? 0 : l1.val;
172+
let l2num = l2 === null ? 0 : l2.val;
173+
//将链表的值和进位值相加,得到为返回链表的值
174+
let sum = l1num + l2num + summod;
175+
//更新进位值,例18/10=1,9/10=0
176+
summod = ~~(sum / 10);
177+
//新节点保存的值,1 %8=2,则添加2
178+
sum = sum % 10;
179+
//添加节点
180+
tempnode.next = new ListNode(sum);
181+
//移动指针
182+
tempnode = tempnode.next;
183+
if (l1) {
184+
l1 = l1.next;
185+
}
186+
if (l2) {
187+
l2 = l2.next;
188+
}
189+
}
190+
//最后根据进位值判断需不需要继续添加节点
191+
if (summod !== 0) {
192+
tempnode.next = new ListNode(summod);
193+
}
194+
return nList.next;//去除-1节点
195+
};
196+
```
197+
198+
Python Code:
199+
200+
```py
201+
class Solution:
202+
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
203+
# 待会儿要返回的链表
204+
nList = ListNode(-1) # 虚拟头节点
205+
tempnode = nList
206+
# 用来保存进位值,初始化为0
207+
summod = 0
208+
while l1 is not None and l2 is not None:
209+
# 如果l1的链表为空则l1num为0,若是不为空,则为链表的节点值
210+
# 判断是否为空,为空就设为0
211+
l1num = 0 if l1 is None else l1.val
212+
l2num = 0 if l2 is None else l2.val
213+
# 将链表的值和进位值相加,得到为返回链表的值
214+
sum_ = l1num + l2num + summod
215+
# 更新进位值,例18/10=1,9/10=0
216+
# 新节点保存的值,1 %8=2,则添加2
217+
# 注:这里使用divmod函数,对上方的代码进行了一丢丢的简化
218+
summod, sum_ = divmod(sum_, 10)
219+
# 添加节点
220+
tempnode.next = ListNode(sum_)
221+
# 移动指针
222+
tempnode = tempnode.next
223+
if l1 is not None:
224+
l1 = l1.next
225+
if l2 is not None:
226+
l2 = l2.next
227+
# 最后根据进位值判断需不需要继续添加节点
228+
if summod != 0:
229+
tempnode.next = ListNode(summod)
230+
return nList.next # 去除-1节点
231+
```
232+

0 commit comments

Comments
 (0)