给出的两个数是正常的正序和倒序的加法区别如下:
如图不难看出,我们只需对对应的两个数相加再加上进位,在计算出下一位的进位即可。
到最后别忘了如果进位不为0,还要加上进位这个节点
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int carry = 0;
ListNode head = null;
ListNode cur = null;
while(l1!=null || l2!=null){
int n1 = l1 == null?0:l1.val;
int n2 = l2 == null ? 0 : l2.val;
int n = n1 + n2 + carry;
if(head == null){
head = cur = new ListNode(n%10);
}else{
cur.next = new ListNode(n%10); //给新链表添加节点
cur = cur.next;
}
carry = n/10;
if(l1 != null) l1 = l1.next;
if(l2 != null) l2 = l2.next;
}
if(carry > 0) cur.next = new ListNode(carry); //如果最后的进位不是0,需要添加节点。
return head;
}
}
相似的题:
由于整数取最高位不方便,所以我们也将这两个数和上面的题一样按倒序算加法。
class Solution {
public List addToArrayForm(int[] num, int k) {
int carry = 0;
List list = new ArrayList<>();
int i = num.length - 1;
while(i >= 0 || k > 0){
int n1 = i >= 0 ? num[i] : 0;
int n2 = k > 0 ? k%10 : 0;
int n = n1 + n2 + carry;
list.add(n%10);
carry = n/10;
i--;
k = k/10;
}
if(carry != 0){
list.add(carry);
}
Collections.reverse(list);
return list;
}
}



