這是最終代碼。
之前是將兩數轉換爲String再轉換成Integer 但是Integer有最大值,故如果給了更大的數據,會導致錯誤。
另外,二版代碼忽略了最後一次remain,導致在最後一次相加依然大於10的時候沒有進位。
import java.util.ArrayList;
public class test {
public static void main(String[] args) {
ListNode l1 = new ListNode(2);
ListNode l3 = l1;
ListNode newNode=new ListNode(4);
l3.next = newNode;
l3=newNode;
newNode=new ListNode(3);
l3.next=newNode;
ListNode l2 = new ListNode(5);
ListNode l4 = l2;
newNode=new ListNode(6);
l4.next = newNode;
l4=newNode;
newNode=new ListNode(4);
l4.next=newNode;
ListNode l10=addTwoNumbers(l1,l2);
while(l10!=null){
System.out.print(l10.val);
l10= l10.next;
}
}
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ArrayList<Integer> list1 = new ArrayList<Integer>();
ArrayList<Integer> list2 = new ArrayList<Integer>();
while(l1!=null){
list1.add(l1.val);
l1 = l1.next;
}
while(l2!=null){
list2.add(l2.val);
l2 = l2.next;
}
ArrayList<Integer> list3 = new ArrayList<Integer>();
int remain=0;
while (list1.size()!=0||list2.size()!=0){
int i=0;
int j=0;
if(list1.size()!=0){
i=list1.get(0);
list1.remove(0);
}
if(list2.size()!=0){
j=list2.get(0);
list2.remove(0);
}
int sum = i+j+remain;
if(sum>=10){
sum=sum-10;
remain=1;
}else {
remain=0;
}
list3.add(sum);
}
if(remain!=0){
list3.add(remain);
}
int len3=list3.size();
ListNode l3=new ListNode(list3.get(0));
ListNode l4=l3;
for(int i=1;i<len3;i++ ){
ListNode newListNode = new ListNode(list3.get(i));
l4.next=newListNode;
l4=newListNode;
}
return l3;
}
}
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}