提示:
解题思路:
此题难点在于是否需要进位
- carry代表当前操作是否需要进位,初始为0代表不需要进位
- dummy节点是一个虚拟的,放在链表最前面,指向头节点,具体查看链表相关
- curr用来遍历,dummy属于是占位的
- 当两两相加,判断如果两位相加小于10则直接放入链表next,如果大于等于10,则进行进位取余,余数放入,和数/10取整数赋值给carry进位再next
实现代码:
var addTwoNumbers = function(l1, l2) {
let dummy = new ListNode();
let curr = dummy;
let carry = 0;
while(l1 || l2) {
let L1 = l1 ? l1.val : 0;
let L2 = l2 ? l2.val :0;
let sum = L1 + L2;
curr.next = new ListNode((sum + carry) % 10);
carry = Math.floor((sum + carry) / 10);
curr = curr.next;
if(l1) {
l1 = l1.next;
}
if(l2) {
l2 = l2.next;
}
}
if (carry > 0) {
curr.next = new ListNode(carry)
}
return dummy.next;
};