方法
- 将两个链表翻转
- 进行按位相加
- 生成新的链表
function ListNode(x){
this.val = x;
this.next = null;
}
/* 反转链表 */
function reserve(head) {
if(!head || !head.next) return head;
let pre = null;
let cur = head;
while(cur) {
const curNext = cur.next;
cur.next = pre;
pre = cur;
cur = curNext
}
return pre;
}
/**
*
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
function addInList( head1 , head2 ) {
if(head1 == null) return head2;
if(head2 == null) return head1;
let pHead1 = reserve(head1);
let pHead2 = reserve(head2);
let flag = 0; // 标志进位
const newHead1 = new ListNode(-1);
let curNode = newHead1 // 新的链表
while(pHead1 || pHead2) {
const v1 = pHead1 ? pHead1.val : 0;
const v2 = pHead2 ? pHead2.val : 0;
const sum = v1 + v2 + flag; // 相加总和
const result = sum % 10; // 具体的值
flag = Math.floor(sum/10);
curNode.next = new ListNode(result);
curNode = curNode.next;
pHead1 = pHead1 ? pHead1.next : null;
pHead2 = pHead2 ? pHead2.next : null;
}
// 若循环后,进位还有值,需要加上
if(flag > 0) {
curNode.next = new ListNode(flag);
}
return reserve(newHead1.next)
}