LeetCode第二题

echosoar 原创发表于 2015/09/13 13:30:00
算法,leetcode
leetcode的第二题: Add Two Numbers
下面是详细的题目内容 ``` You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 ``` 大体中文意思就是给你两个链表代表两个非负数,数字在里面是倒序存放的,每个节点存放一个单数,然后把这两个数相加,把结果链表返回。 其实这也挺好理解的,就是把一个多位数按照每一位进行拆分,然后把每一位存到一个链表的结点上,因为是倒序的,那么两个数字相加就可以相当于两个链表从链表的开头把每一个结点进行相加,如果大于10那么就取这两个数字相加的和除以10的余数作为这个节点的值,把整出10得到的结果进到下一个节点上。 下面是我的代码,大概执行时间为292ms : ```
var addTwoNumbers = function(l1,l2){
var head = new ListNode(0);
var p = head;
var tmp = 0;
while(l1 || l2 || tmp) {
if(l1) {
tmp += l1.val;
l1 = l1.next;
}
if(l2) {
tmp += l2.val;
l2 = l2.next;
}
p = p.next = new ListNode(tmp%10);
tmp = Math.floor(tmp/10);
}
return head.next;
};
``` 稍微分析一下代码,首先定义一个头结点head,然后定义一个变量p来进行后面结点的添加。 定义了一个变量tem,tem有两个作用,第一个作用存放把两个数进行相加的结果,第二个作用就是用来进位,即后面的 tmp = Math.floor(tmp/10); while循环用来判断是否已经到了链表的最后,如果了l1和l2这两条链表都结束了,那么l1和l2都应该为null,而且当tem也为零时就相当于while的条件为假,循环就终止了。