我的想法很简单,因为链表是逆序存储的,所以我可以从头开始一位一位的加,如果遇到进位则在下一个加法里将其加上。如果某一个链表空了,那么剩下的链表按照相同的方式进行插入。需要注意的是,如果链表的最后一项还有进位的话,需要再次插入一个节点,就可以了。
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int n=0;
ListNode tail=null,head=null;
while(l1 != null || l2 != null){
int n1 = l1 != null ? l1.val : 0;
int n2 = l2 != null ? l2.val : 0;
if(head==null){
head=tail=new ListNode((n1+n2+n)%10);
}else{
tail.next=new ListNode((n1+n2+n)%10);
tail=tail.next;
}
n = n1+n2+n>=10 ? 1 : 0;
if(l1 != null){
l1=l1.next;
}
if(l2 != null){
l2=l2.next;
}
}
if (n > 0) {
tail.next = new ListNode(1);
}
return head;
}
}