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.
Example:
1 | Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) |
题目大意
这题大概意思是给两个链表,链表里面每个值都是一个个位数,然后按照顺序把对应的每个数相加,但是进位的时候向后面进位。如上面的4 + 6 = 10,就把进位的1加到(3 + 4)的结果中。
Solution1: 初步解决方案
按照测试驱动开发的思想,首先尝试构造两个简单的链表
1 | var l1 = new ListNode(3); |
根据题意
1 | var addTwoNumbers = function (l1, l2) { |
怎么理解这个while循环呢,第一次进入的时候,l1、l2 都有值,所以v1、v2的值就是l1和l2的val,l3的第一个元素就是(3 + 7 + 0)% 10 = 0;
第二次进入循环的时候l1和l2已经变成了它们的next,p为1,l3的第二个元素是 (4 + 5 + 1) % 10 = 0;
第三次进入循环的时候l1和l2分别是链表的第三个元素null,p为1, 所以l3的第三个元素是 (0 + 0 + 1)% 10 = 1;
第四次由于p === 0,l1和l2都是null,所以无法进入循环,循环终止;
最终程序返回l3。
Solution2
1 | var addTwoNumbers = function (l1, l2) { |
刚刚入门算法,大神莫喷,欢迎指正。