Skip to content

Commit

Permalink
perf: Update addTwoNumbers的JavaScript解法 (azl397985856#163)
Browse files Browse the repository at this point in the history
* refactor: Update addTwoNumbers的JavaScript解法

* style: 提交的addTwoNumbers的JS代码格式改成2个空格

* chore: Add 2.addTwoNumbers的JS解法的注释
  • Loading branch information
sunnynudt authored and azl397985856 committed Sep 4, 2019
1 parent 478ae20 commit c9570cb
Showing 1 changed file with 27 additions and 34 deletions.
61 changes: 27 additions & 34 deletions problems/2.addTwoNumbers.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,46 +47,39 @@ JavaScript:
* @return {ListNode}
*/
var addTwoNumbers = function(l1, l2) {
var carried = 0; // 用于进位
const head = new ListNode();
const noop = {
val: 0,
next: null
};
let currentL1 = l1;
let currentL2 = l2;
let currentNode = head; // 返回的链表的当前node
let newNode; // 声明在外面节省内存
let previousNode; // 记录前一个节点,便于删除最后一个节点

while (currentL1 || currentL2) {
newNode = new ListNode(0);

currentNode.val =
((currentL1 || noop).val + (currentL2 || noop).val + carried) % 10;

currentNode.next = newNode;
previousNode = currentNode;
currentNode = newNode;

if ((currentL1 || noop).val + (currentL2 || noop).val + carried >= 10) {
carried = 1;
} else {
carried = 0;
if (l1 === null || l2 === null) return null

// 使用dummyHead可以简化对链表的处理,dummyHead.next指向新链表
let dummyHead = new ListNode(0)
let cur1 = l1
let cur2 = l2
let cur = dummyHead // cur用于计算新链表
let carry = 0 // 进位标志

while (cur1 !== null || cur2 !== null) {
let val1 = cur1 !== null ? cur1.val : 0
let val2 = cur2 !== null ? cur2.val : 0
let sum = val1 + val2 + carry
let newNode = new ListNode(sum % 10) // sum%10取模结果范围为0~9,即为当前节点的值
carry = sum >= 10 ? 1 : 0 // sum>=10,carry=1,表示有进位
cur.next = newNode
cur = cur.next

if (cur1 !== null) {
cur1 = cur1.next
}

currentL1 = (currentL1 || noop).next;
currentL2 = (currentL2 || noop).next;
if (cur2 !== null) {
cur2 = cur2.next
}
}

if (carried) {
// 还有位没进呢
previousNode.next = new ListNode(carried)
} else {
previousNode.next = null;
if (carry > 0) {
// 如果最后还有进位,新加一个节点
cur.next = new ListNode(carry)
}

return head;
return dummyHead.next
};
```
C++
Expand Down

0 comments on commit c9570cb

Please sign in to comment.