前言
因为js中没有链表的数据类型,仔了细看官方提供的注释代码就完全解决了这个问题。给出了一个ListNode的函数,这是让我们以这个函数为实例原型来解决问题,感觉这个操作很骚。在这里的操作很像Generator函数的一种使用方式,这样代入就能很容易理解下面的解题思路了。
/**
* 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 u = 0, //定义变量两变量和是否大于10
l3 = new ListNode(0), //定义变量存储链表数据
p1 = l1,
p2 = l2,
p3 = l3; //定义指针,确定当前链表节点数据
while (p1 || p2) {
//求出当前节点上数据和;有且仅当当前节点包含有效数据,否则节点默认为0
let sum = ((p1 && p1.val) || 0) + ((p2 && p2.val) || 0) + u;
//重制标记
u = 0;
//求出当前节点数据,大于10做标记
if (sum >= 10) {
sum %= 10;
u = 1;
}
p3.next = new ListNode(sum);
//当前l1,l2指针节点数据有效时,指针位置后移
p1 && (p1 = p1.next);
p2 && (p2 = p2.next);
//l3指针节点后移,创建新节点数据
p3 = p3.next;
}
u && (p3.next = new ListNode(u));
//l3第一个节点默认为0,所以取第二个节点后数据
return l3.next;
};