LeetCode-Add Two Numbers

没有难度的题目,纯用来练习链表操作和递归的使用的,难得的一次就能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)给的答案也没有很好的

解决这个问题,后来好像有人给出了一个很巧妙的答案。

原文地址:https://www.cnblogs.com/chasuner/p/addTwoNumbers.html