没有难度的题目,纯用来练习链表操作和递归的使用的,难得的一次就能ac大小数据呀!
1 class Solution { 2 public: 3 ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) { 4 // Start typing your C/C++ solution below 5 // DO NOT write int main() function 6 ListNode *res = add(l1, l2, false); 7 return res; 8 } 9 ListNode *add(ListNode *l1, ListNode *l2, bool flag) { 10 int carry = 0; 11 bool cflag = false; 12 if (flag) { 13 carry = 1; 14 } 15 if (l1 == NULL && l2 == NULL) { 16 if (!flag) { 17 return NULL; 18 } 19 ListNode *node = new ListNode(); 20 node->val = carry; 21 node->next = NULL; 22 return node; 23 } 24 if (l1 == NULL) { 25 ListNode *node = l2; 26 node->val = l2->val + carry; 27 if (node->val >= 10) { 28 node->val -= 10; 29 cflag = true; 30 } 31 node->next = add(NULL, l2->next, cflag); 32 return node; 33 } 34 if (l2 == NULL) { 35 ListNode *node = l1; 36 node->val = l1->val + carry; 37 if (node->val >= 10) { 38 node->val -= 10; 39 cflag = true; 40 } 41 node->next = add(l1->next, NULL, cflag); 42 return node; 43 } 44 ListNode *node = l1; 45 node->val = l1->val + l2->val + carry; 46 if (node->val >= 10) { 47 node->val -= 10; 48 cflag = true; 49 } 50 node->next = add(l1->next, l2->next, cflag); 51 return node; 52 } 53 };
记得以前在待字闺中上看到过相似的题目,好像叫单链表和之恋,那道题目中的链表表示的数是正向的,
而且不允许用递归,而且还要求最多只能扫描链表两遍。当时没想出来,而且陈利人(http://weibo.com/lirenchen)给的答案也没有很好的
解决这个问题,后来好像有人给出了一个很巧妙的答案。