这题主要考察对链表的操作,需要两个指针同时移动,注意加法要进位,并且注意指针移动到空后的处理,时间复杂度为O(n),注意链表第一位创建一个空0的小技巧,避免重复处理。注意链表最后一位数字的处理进位。
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var addTwoNumbers = function(l1, l2) {
var flag = 0,n1 = l1.val,n2 = l2.val,sum,result,head,temp;
head = result = new ListNode(0);
while(n1 !== null || n2 !== null) {
n1 = n1 || 0;
n2 = n2 || 0;
sum = n1 + n2 + flag;
if(sum >= 10) {
flag = 1;
sum -= 10;
}
else
flag = 0;
temp = new ListNode(sum);
result.next = temp;
result = temp;
sum = 0;
l1 = l1 && l1.next;
l2 = l2 && l2.next;
n1 = l1 && l1.val;
n2 = l2 && l2.val;
}
if(flag == 1) {
temp = new ListNode(1);
result.next = temp;
}
return head.next;
};