原题链接:leetcode2
题目描述:给定两个链表,每位数字按照逆序方式存储,并且每个结点只存储一位数字,使两个链表表示的值相加
思路: 从低位到高位,按位进行计算,注意进位和取余问题。这里创建一个新的链表L3 采用尾插法处理存储和。
/**
* 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 l3 = new ListNode('0')
let rear = l3 //采用尾插法
let carry = 0 //进位
while (l1 || l2) {
let val1 = l1 == null ? 0 : l1.val
let val2 = l2 == null ? 0 : l2.val
rear.next = new ListNode((val1 + val2 + carry) % 10)
carry = Math.floor((val1 + val2 + carry) / 10)
if (l1) l1 = l1.next
if (l2) l2 = l2.next
rear = rear.next
}
//处理最高位加和之后的进位
if (carry != 0) {
rear.next = new ListNode(carry)
}
return l3.next
};
附加小知识:带有头结点的尾插法:将新申请的结点插入到终端结点的后面,因此必须新增一个尾指针rear,用来始终指向尾结点。