类似于数组的高精度加法,但是需要知道连接链表
优化前:
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var addTwoNumbers = function (l1, l2) {
let ans = new ListNode();
let head = null;
let t = 0;
while (l1 && l2) {
let value = (l1.val + l2.val + t) % 10;
if (!head) {
ans.val = value;
head = ans;
} else {
let node = new ListNode();
node.val = value;
head.next = node;
head = node;
}
t = parseInt((l1.val + l2.val + t) / 10);
l1 = l1.next;
l2 = l2.next;
}
while (l1 !== null) {
let node = new ListNode();
node.val = (l1.val + t) % 10;
head.next = node;
head = node;
t = parseInt((l1.val + t) / 10);
l1 = l1.next;
}
while (l2 !== null) {
let node = new ListNode();
node.val = (l2.val + t) % 10;
head.next = node;
head = node;
t = parseInt((l2.val + t) / 10);
l2 = l2.next;
}
if (t) {
let node = new ListNode();
node.val = 1;
head.next = node;
}
return ans;
};
其实可以写在一个while循环里面,看题解优化后:还比上面的慢了1ms,但是代码风格更好
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var addTwoNumbers = function (l1, l2) {
let head = null;
let tail = null;
let t = 0;
while (l1 || l2) {
const a = l1 ? l1.val : 0;
const b = l2 ? l2.val : 0;
let value = (a + b + t) % 10;
let node = new ListNode();
if (!head) {
head = tail = node;
head.val = value;
} else {
node.val = value;
tail.next = node;
tail = node;
}
t = parseInt((a + b + t) / 10);
if (l1) {
l1 = l1.next;
}
if (l2) {
l2 = l2.next;
}
}
if (t) {
let node = new ListNode(t);
tail.next = node;
}
return head;
};
380

被折叠的 条评论
为什么被折叠?



