Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /