Appearance
2. 两数相加问题
解法一:将两数都转化成数字,相加之后转化成链表(js大数相加会有问题,这里不实现,其他语言可以用long类型实现)。
解法二:将在对应位置上进行相加,利用数学思维,用一个变量保存进位。
js
/**
* 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 p = l1;
let q = l2;
let curry = 0; // 进位
// 不动的头指针
let head = new ListNode(-1);
let cur = head;
// 如果p和q有一个没有到头,就遍历
while(p !== null || q !== null) {
// 到头的用0来补充
let num1 = p === null ? 0 : p.val;
let num2 = q === null ? 0 : q.val;
// 本位相加
let sum = num1 + num2 + curry;
// 下一位进位
curry = Math.floor(sum / 10);
// 本位数字
let val = sum % 10;
// 创建链表
cur.next = new ListNode(val);
// 循环条件
cur = cur.next;
p = p === null ? p : p.next;
q = q === null ? q : q.next;
}
// 最后一个进位判断
if(curry > 0) {
cur.next = new ListNode(curry);
}
// 返回头指针
return head.next;
};