Skip to content

Commit c9570cb

Browse files
sunnynudtazl397985856
authored andcommitted
perf: Update addTwoNumbers的JavaScript解法 (azl397985856#163)
* refactor: Update addTwoNumbers的JavaScript解法 * style: 提交的addTwoNumbers的JS代码格式改成2个空格 * chore: Add 2.addTwoNumbers的JS解法的注释
1 parent 478ae20 commit c9570cb

File tree

1 file changed

+27
-34
lines changed

1 file changed

+27
-34
lines changed

problems/2.addTwoNumbers.md

Lines changed: 27 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -47,46 +47,39 @@ JavaScript:
4747
* @return {ListNode}
4848
*/
4949
var addTwoNumbers = function(l1, l2) {
50-
var carried = 0; // 用于进位
51-
const head = new ListNode();
52-
const noop = {
53-
val: 0,
54-
next: null
55-
};
56-
let currentL1 = l1;
57-
let currentL2 = l2;
58-
let currentNode = head; // 返回的链表的当前node
59-
let newNode; // 声明在外面节省内存
60-
let previousNode; // 记录前一个节点,便于删除最后一个节点
61-
62-
while (currentL1 || currentL2) {
63-
newNode = new ListNode(0);
64-
65-
currentNode.val =
66-
((currentL1 || noop).val + (currentL2 || noop).val + carried) % 10;
67-
68-
currentNode.next = newNode;
69-
previousNode = currentNode;
70-
currentNode = newNode;
71-
72-
if ((currentL1 || noop).val + (currentL2 || noop).val + carried >= 10) {
73-
carried = 1;
74-
} else {
75-
carried = 0;
50+
if (l1 === null || l2 === null) return null
51+
52+
// 使用dummyHead可以简化对链表的处理,dummyHead.next指向新链表
53+
let dummyHead = new ListNode(0)
54+
let cur1 = l1
55+
let cur2 = l2
56+
let cur = dummyHead // cur用于计算新链表
57+
let carry = 0 // 进位标志
58+
59+
while (cur1 !== null || cur2 !== null) {
60+
let val1 = cur1 !== null ? cur1.val : 0
61+
let val2 = cur2 !== null ? cur2.val : 0
62+
let sum = val1 + val2 + carry
63+
let newNode = new ListNode(sum % 10) // sum%10取模结果范围为0~9,即为当前节点的值
64+
carry = sum >= 10 ? 1 : 0 // sum>=10,carry=1,表示有进位
65+
cur.next = newNode
66+
cur = cur.next
67+
68+
if (cur1 !== null) {
69+
cur1 = cur1.next
7670
}
7771

78-
currentL1 = (currentL1 || noop).next;
79-
currentL2 = (currentL2 || noop).next;
72+
if (cur2 !== null) {
73+
cur2 = cur2.next
74+
}
8075
}
8176

82-
if (carried) {
83-
// 还有位没进呢
84-
previousNode.next = new ListNode(carried)
85-
} else {
86-
previousNode.next = null;
77+
if (carry > 0) {
78+
// 如果最后还有进位,新加一个节点
79+
cur.next = new ListNode(carry)
8780
}
8881

89-
return head;
82+
return dummyHead.next
9083
};
9184
```
9285
C++

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy