题干
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
想法
模拟加法 每个位置是对应listnode值加上进位
都从两个node头开始遍历,如果一个完了另一个没完,就单独加另一个即可
注意循环完成如果进位仍不为0 那就再加个值为进位的头节点
Java代码
class Solution {
public ListNode
addTwoNumbers(ListNode l1
, ListNode l2
) {
if(l1
==null
){
return l2
;
}
if(l2
==null
){
return l1
;
}
int tem
=(l1
.val
+l2
.val
)%10;
int plus
=(l1
.val
+l2
.val
)/10;
ListNode res
=new ListNode(tem
);
ListNode head
=res
;
while (l1
.next
!=null
&&l2
.next
!=null
){
l1
=l1
.next
;
l2
=l2
.next
;
tem
=(l1
.val
+l2
.val
+plus
)%10;
res
.next
=new ListNode(tem
);
res
=res
.next
;
plus
=(l1
.val
+l2
.val
+plus
)/10;
}
while (l1
.next
!=null
){
l1
=l1
.next
;
tem
=(l1
.val
+plus
)%10;
res
.next
=new ListNode(tem
);
res
=res
.next
;
plus
=(l1
.val
+plus
)/10;
}
while (l2
.next
!=null
){
l2
=l2
.next
;
tem
=(l2
.val
+plus
)%10;
res
.next
=new ListNode(tem
);
res
=res
.next
;
plus
=(l2
.val
+plus
)/10;
}
if(plus
!=0){
res
.next
=new ListNode(plus
);
}
return head
;
}
}
我的leetcode代码都已经上传到我的githttps://github.com/ragezor/leetcode