这题没什么难度,直接看代码吧
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode* dfs(ListNode *l1, ListNode *l2, int carry) { 12 if (!l1 && !l2) { 13 if (!carry) return NULL; 14 else { 15 ListNode* tmp = new ListNode(carry); 16 return tmp; 17 } 18 } 19 if (!l1) { 20 int sum = l2->val + carry; 21 ListNode* tmp = new ListNode(sum%10); 22 carry = sum/10; 23 tmp->next = dfs(l1, l2->next, carry); 24 return tmp; 25 } 26 if (!l2) { 27 int sum = l1->val + carry; 28 ListNode* tmp = new ListNode(sum%10); 29 carry = sum/10; 30 tmp->next = dfs(l1->next, l2, carry); 31 return tmp; 32 } 33 if (l1 && l2) { 34 int sum = l1->val + l2->val + carry; 35 ListNode* tmp = new ListNode(sum%10); 36 carry = sum/10; 37 tmp->next = dfs(l1->next, l2->next, carry); 38 return tmp; 39 } 40 } 41 ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) { 42 // Start typing your C/C++ solution below 43 // DO NOT write int main() function 44 int carry = 0; 45 ListNode *ret = dfs(l1, l2, carry); 46 return ret; 47 } 48 };
Java:
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 public class Solution { 10 public ListNode addTwoNumbers(ListNode l1, ListNode l2) { 11 return addTwoNumbersWithCarry(l1, l2, 0); 12 } 13 private ListNode addTwoNumbersWithCarry(ListNode l1, ListNode l2, int carry) 14 { 15 if (l1 == null && l2 == null) 16 { 17 if (carry > 0) 18 { 19 return new ListNode(carry); 20 } 21 else 22 { 23 return null; 24 } 25 } 26 else if (l1 == null) 27 { 28 int num = l2.val + carry; 29 ListNode newNode = new ListNode(num % 10); 30 newNode.next = addTwoNumbersWithCarry(l1, l2.next, num / 10); 31 return newNode; 32 } 33 else if (l2 == null) 34 { 35 int num = l1.val + carry; 36 ListNode newNode = new ListNode(num % 10); 37 newNode.next = addTwoNumbersWithCarry(l1.next, l2, num / 10); 38 return newNode; 39 } 40 else 41 { 42 int num = l1.val + l2.val + carry; 43 ListNode newNode = new ListNode(num % 10); 44 newNode.next = addTwoNumbersWithCarry(l1.next, l2.next, num / 10); 45 return newNode; 46 } 47 } 48 }