1. 判断l1,l2的长度,谁大谁为主
2. 分情况,当l2较短时,只需考虑余数和l1的值
3. 判断是否有溢出,当有溢出时(remain!=0&l1.=null),进位.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int remainder=0;
ListNode sum;
if(getSize(l1)>getSize(l2)){
sum = addList(l1,l2);
}
else{
sum = addList(l2,l1);
}
return sum;
}
public int addNum(int a, int b){
return (a+b)%10;
}
public int getRemainder(int a, int b){
return (a+b)/10;
}
public ListNode addList(ListNode l1,ListNode l2){
ListNode sum=new ListNode();
ListNode head = sum;
int remain = 0;
while(l1!=null){
if(l2!=null)
{
head.val=(addNum(l1.val,l2.val)+remain)%10;
remain=(addNum(l1.val, l2.val)+remain)/10;
remain+=getRemainder(l1.val, l2.val);
l1=l1.next;
l2=l2.next;
}
else
{
head.val=addNum(l1.val,remain);
remain=(l1.val+remain)/10;
l1=l1.next;
}
if(l1!=null) {
head.next = new ListNode();
head = head.next;
}
else if(remain!=0){
head.next = new ListNode(remain);
}
}
return sum;
}
public int getSize(ListNode l){
int length=0;
while(l.next!=null){
length++;
l=l.next;
}
return length;
}
public void printList(ListNode l){
while (l!=null){
System.out.print(l.val);
l=l.next;
}
}
}