You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Example:
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 Explanation: 342 + 465 = 807.
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {//链表 my ListNode re = new ListNode(0); ListNode listre = re; ListNode list1 =l1; ListNode list2 =l2; int sum = 0; //处理第一个,或者使用返回re.next解决 if(null!=list1&&null!=list2){ sum = list1.val+list2.val+sum; listre.val = sum % 10; list1=list1.next; list2=list2.next; sum = sum/10; } while(null!=list1&&null!=list2){ sum = list1.val+list2.val+sum; listre.next= new ListNode(sum%10); listre = listre.next; list1=list1.next; list2=list2.next; sum = sum/10; } if (null!= list1){ while(null!=list1){ sum = list1.val+sum; listre.next= new ListNode(sum%10); listre = listre.next; list1=list1.next; sum = sum/10; } } else if (null!= list2){ while(null!=list2){ sum = list2.val+sum; listre.next= new ListNode(sum%10); listre = listre.next; list2=list2.next; sum = sum/10; } } //处理最后的进位 if(0!=sum){ listre.next= new ListNode(sum); } return re; }
简洁版
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; carry = sum / 10; curr.next = new ListNode(sum % 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; }