解法1:
/**
* 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) {
//l1,l2转arr
int[] arr1 = new int[100],arr2 = new int[100],arr = new int[100];
int k = 0;
ListNode nextl1 = l1;
ListNode nextl2 = l2;
arr1[0] = l1.val;
arr2[0] = l2.val;
int carry = 0;
arr[0] = (arr1[0] + arr2[0] + carry)%10;
carry = (arr1[0] + arr2[0] + carry)/10;
while(nextl1.next!=null || nextl2.next!=null){
k = k + 1;
if(nextl1.next!=null){
arr1[k] = nextl1.next.val;
nextl1 = nextl1.next;
}else{
arr1[k] = 0;
}
if(nextl2.next!=null){
arr2[k] = nextl2.next.val;
nextl2 = nextl2.next;
}else{
arr2[k] = 0;
}
arr[k] = (arr1[k] + arr2[k] + carry)%10;
carry = (arr1[k] + arr2[k] + carry)/10;
}
arr[k+1] = carry;
int[] finalArr = null;
//arr转finalArr
if(carry>0){
finalArr = new int[k+2];
}else{
finalArr = new int[k+1];
}
for(int i=0;i<finalArr.length;i++){
finalArr[i] = arr[i];
}
//finalArr转result
ListNode result = new ListNode(finalArr[0]);
ListNode next = result;
for(int i=1;i<finalArr.length;i++){
next.next = new ListNode(finalArr[i]);
next = next.next;
}
return result;
}
}
解法2:
/**
* 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) {
ListNode dummyHead = new ListNode(0);
ListNode p = l1, q = l2, curr = dummyHead;
//进位
int carry = 0;
while (p != null || q != null) {
int x = (p != null) ? p.val : 0;
int y = (q != null) ? q.val : 0;
int sum = carry + x + y;//计算当前位sum=进位+第一个数当前位+第二个数当前位
carry = sum / 10;//进位为除以10
curr.next = new ListNode(sum % 10);//当前位为对10取余
curr = curr.next;//移动结果的节点游标
if (p != null) p = p.next;//移动第一个数节点游标
if (q != null) q = q.next;//移动第二个数节点游标
}
//最高位
if (carry > 0) {
curr.next = new ListNode(carry);
}
return dummyHead.next;
}
}