public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int[] num1=ListToArray(l1);
int[] num2=ListToArray(l2);
int i1=arrayToInt(num1);
int i2=arrayToInt(num2);
int result=i1+i2;
int[] numResult=IntToArray(result);
return headAdd(numResult);
}
public int[] ListToArray(ListNode l){
ArrayList<Integer> num=new ArrayList<Integer>();
int length=0;
while(l!=null){
num.add(l.val);
l=l.next;
length++;
}
int[] result=new int[length];
for(int i=length-1,j=0;i>=0;i--,j++){
result[i]=num.get(j);
}
return result;
}
//返回一个逆序int,[1,2,3]=321
public int arrayToInt(int[] num){
int result=0;
for(int i=num.length-1,l=num.length;i>=0;i--,l--){
result+=num[i]*Math.pow(10,l-1);
}
return result;
}
public int[] IntToArray(int value){
String str=String.valueOf(value);
int[] intArray = new int[str.length()];
for (int i = 0; i < str.length(); i++) {
// 遍历str将每一位数字添加如intArray
Character ch = str.charAt(i);
intArray[i] = Integer.parseInt(ch.toString());
}
return intArray;
}
public ListNode headAdd(int[] num){
ListNode head=new ListNode(num[num.length-1],null);
ListNode l=head;
for(int i=num.length-2;i>=0;i--){
l.next=new ListNode(num[i],null);
l=l.next;
}
return head;
}
}
思路是
1,申请一个链表长度的数组,把链表的值赋给数组。
2,把这两个数组转换为int
3,将两个数相加
4,将结果转化为数组
5,通过数组从尾部到头部遍历,用尾插法构建链表