题目
![来自力扣](https://img-blog.csdnimg.cn/edd2ecc83d5d4a58b3379faeae7424f1.png)
- 这里的示例好像有问题,并不是反序,就是正常顺序。如图说是,应该就是243 + 564 = 708;
解题1:傻瓜式无脑操作
var addTwoNumbers = function(l1, l2) {
const list1 = [];
const list2 = [];
const list3 = [];
const res = {}
while (l1) {
list1.push(l1.val)
l1 = l1.next;
}
while (l2) {
list2.push(l2.val)
l2 = l2.next;
}
let i = 0;
while (1) {
if (list1[i] === undefined && list2[i] === undefined) {
break;
}
let t = (list1[i] || 0) + (list2[i] || 0) + (list3[i] || 0);
if (t > 9) {
list3[i] = t - 10;
list3[i+1] = 1;
} else {
list3[i] = t;
}
i = i+1;
}
let p = res;
for (j in list3) {
p.val = list3[j];
p.next = j == list3.length - 1? null: {};
p = p.next;
}
return res;
};
- 时间长,效率低,内存耗费高,后面慢慢改
- 打印了一下返回值,输出是这样子的,用对象模拟的链表。
- 中间出现了一些问题,如在判断数组当前下标是否有值,不能直接用
if (!list[i])
, 因为极有可能,当前有值,但是值为0,这样子会造成判断错误。所以用if判断的时候,一定要注意,思考是否有等于0的情况,因为0是会被认为成 false 的。
![在这里插入图片描述](https://img-blog.csdnimg.cn/f0819537e2944be2ab7eebff602d5d46.png)
解题2:稍微优化了一下:
const list = {};
let t = 0;
let p = list;
while (l1 || l2 || t) {
let k = (l1?.val || 0) + (l2?.val || 0) + t;
p.val = k % 10;
t = k > 9? 1: 0;
l1 = l1? l1.next: null;
l2 = l2? l2.next: null;
p.next = (l1 || l2 || t)? {}: null;
p = p.next;
}
return list;
};