
(1)迭代法
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {int total = 0;int carry = 0;ListNode head = new ListNode(0);ListNode cur = head;while (l1 !=null && l2!=null){int sum =l1.val + l2.val;if (total!=0){sum=sum+total;}total = sum/10;carry = sum%10;cur.next = new ListNode(carry);cur = cur.next;l1=l1.next;l2=l2.next;}while(l1 !=null){int sum=l1.val;sum = sum + total;total = sum/10;carry = sum%10;cur.next = new ListNode(carry);cur = cur.next;l1=l1.next;}while(l2 !=null){int sum=l2.val;sum = sum + total;total = sum/10;carry = sum%10;cur.next = new ListNode(carry);cur = cur.next;l2=l2.next;}if (total!=0){cur.next = new ListNode(total);}return head.next;}
(2)递归法
public ListNode addTwoNumbersTwo(ListNode l1, ListNode l2) {return addTwoNumbersRecursive(l1, l2, 0);}private ListNode addTwoNumbersRecursive(ListNode l1, ListNode l2, int carry) {if (l1 == null && l2 == null && carry == 0) {return null;}int val1 = (l1 != null) ? l1.val : 0;int val2 = (l2 != null) ? l2.val : 0;int sum = val1 + val2 + carry;int currentVal = sum % 10;int nextCarry = sum / 10;ListNode current = new ListNode(currentVal);ListNode next1 = (l1 != null) ? l1.next : null;ListNode next2 = (l2 != null) ? l2.next : null;current.next = addTwoNumbersRecursive(next1, next2, nextCarry);return current;}