一、题目描述
二、解题思路
刚开始试了把链表数字转为整数,但溢出了,那只能逐位相加了,考虑进位即可
三、代码实现
1.转为整数(不可行)
var addTwoNumbers = function (l1, l2) {
let l1num = 0, l2num = 0, l1n = 1, l2n = 1
while (l1 != null) {
l1num += l1.val * l1n
l1n *= 10
l1 = l1.next
}
while (l2 != null) {
l2num += l2.val * l2n
l2n *= 10
l2 = l2.next
}
let resNum = (l1num * 10000 + l2num * 10000) / 10000
let node = new ListNode(resNum % 10, undefined)
let res = node
resNum = Math.floor(resNum / 10)
while (resNum / 10 != 0) {
node.next = new ListNode(resNum % 10, undefined)
resNum = Math.floor(resNum / 10)
node = node.next
}
return res
};
- 逐位相加
var addTwoNumbers = function (l1, l2) {
let carry = 0
let res = new ListNode(0)
let temp = res
while(l1 != null || l2 != null){
let n1 = l1 ? l1.val : 0
let n2 = l2 ? l2.val : 0
let sum = n1 + n2 + carry
carry = Math.floor(sum / 10)
temp.next = new ListNode(sum%10)
if(l1 != null){
l1 = l1.next
}
if(l2 != null){
l2 = l2.next
}
temp = temp.next
}
if(carry != 0){
temp.next = new ListNode(1)
}
return res.next
};