第一次做的时候,忽略了int范围,走了很多弯路,后面用char数组很快就实现了
/**
* 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) {
StringBuilder sb1=new StringBuilder();
sb1.append(l1.val);
while(l1.next!=null){
sb1.append(l1.next.val);
l1=l1.next;
}
String s1=sb1.reverse().toString();
//StringBuilder sb2=new StringBuilder(l2.val;
StringBuilder sb2=new StringBuilder(); sb2.append(l2.val);
while(l2.next!=null){
sb2.append(l2.next.val);
l2=l2.next;
}
String s2=sb2.reverse().toString();
char[] cs1=s1.toCharArray();
char[] cs2=s2.toCharArray();
int len1=cs1.length;
int len2=cs2.length;
int[] cs=new int[(len1>len2?len1:len2)+1];
if(len1>len2){
int add=0;
for(int i=0;i<len1;i++){
if(i<len2){
int a=Integer.parseInt(String.valueOf(cs1[len1-1-i]));
//int b=Integer.parseInt(cs2[len2-1-i]);
int b=Integer.parseInt(String.valueOf(cs2[len2-1-i]));
int re=a+b+add;
if(re>9){
add=1;
cs[len1-i]=re%10;
}else{
add=0;
cs[len1-i]=re;
}
}else{
int a=Integer.parseInt(String.valueOf(cs1[len1-1-i]));
int b=0;
int re=a+b+add;
if(re>9){
add=1;
cs[len1-i]=re%10;
}else{
add=0;
cs[len1-i]=re;
}
}
}
cs[0]=add;
}else{//len1<len2
int add=0;
for(int i=0;i<len2;i++){
if(i<len1){
int a=Integer.parseInt(String.valueOf(cs2[len2-1-i]));
int b=Integer.parseInt(String.valueOf(cs1[len1-1-i]));
int re=a+b+add;
if(re>9){
add=1;
cs[len2-i]=re%10;
}else{
add=0;
cs[len2-i]=re;
}
}else{
int a=Integer.parseInt(String.valueOf(cs2[len2-1-i]));
int b=0;
int re=a+b+add;
if(re>9){
add=1;
cs[len2-i]=re%10;
}else{
add=0;
cs[len2-i]=re;
}
}
}
cs[0]=add;
}
int size=cs.length;
ListNode l=new ListNode(cs[size-1]);
ListNode l0=l;
for(int i=1;i<size;i++){
ListNode node=null;
if(i==size-1&&cs[size-1-i]==0){
break;
}
node= new ListNode(cs[size-1-i]);
l.next=node;
l=l.next;
}
return l0;
}
}