题目描述
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
思路
两个链表同时向后遍历,讲对应结点数字相加,如果超过10向后进位,以此类推。
注意点
不要漏了进位,以及什么时候应该进位
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode retNext = null;
ListNode ret = null;
int tens = 0;
while(l1 != null && l2 != null){
int tem = l1.val + l2.val + tens;
int ones = tem % 10;
tens = tem / 10;
if(retNext == null){
retNext = new ListNode(ones);
ret = retNext;
}else{
retNext.next = new ListNode(ones);
retNext = retNext.next;
}
l1 = l1.next;
l2 = l2.next;
}
while(l1 != null){
if(tens > 0){
int tem = l1.val + tens;
int ones = tem % 10;
retNext.next = new ListNode(ones);
tens = tem / 10;
}else{
retNext.next = new ListNode(l1.val);
}
retNext = retNext.next;
l1 = l1.next;
}
while(l2 != null){
if(tens > 0){
int tem = l2.val + tens;
int ones = tem % 10;
retNext.next = new ListNode(ones);
tens = tem / 10;
}else{
retNext.next = new ListNode(l2.val);
}
retNext = retNext.next;
l2 = l2.next;
}
if(tens > 0){
retNext.next = new ListNode(1);
retNext = retNext.next;
}
return ret;
}
}