给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
看到这道题的时候有点无从下手,因为不知道js的链表表现形式是怎么样的
看到一篇博文JavaScript 版数据结构与算法(三)链表才稍微理解
题中的2->4->3可以理解为
{
element: 2,
next: {
element: 4,
next: {
element: 3,
next: null
}
}
}
那这样就好办了
解题思路:
- 取出每次遍历的链表值相加
- 如果进位则统计起来
- 题中l1,l2长度不确定,所以当l1,l2以及进位不为空时,继续计算
- 用一个新的对象存要返回的链表
需要的知识点:
- 如何在javascript里遍历链表
JavaScript代码
/**
* 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 mylist1 = l1;
var mylist2 = l2;
var c3;
var l3;
var carry = 0;
while(mylist1 || mylist2|| carry){
var value1 = 0;
var value2 = 0;
var sum = 0;
if(mylist1)
{
value1 = mylist1.val;
mylist1 = mylist1.next;
}
if(mylist2)
{
value2 = mylist2.val;
mylist2 = mylist2.next;
}
sum = value1 + value2 + carry;
carry = Math.floor(sum / 10);
if (!c3) {
l3 = new ListNode(sum % 10);
c3 = l3;
} else {
c3.next = new ListNode(sum % 10);
c3 = c3.next;
}
}
return l3;
};
踩坑:之前没有用c3代替l3向下遍历,导致最后输出的结果是最后一个对象
网友评论