M-AddTwoNumbers-未完成
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 *addTwoNumbers(ListNode *l1, ListNode *l2) { 12 // 这一题特别能考察思维的全面性,很容易就指针越界; 13 14 /* 15 * 问题1:虽然两段判断针对两种不同的情况,但当上一个判断语句中,已经对指针进行操作; 16 * 运行到第二段判断时,很可能由于指针位置变化,当前的判断出现越界 17 */ 18 19 /* 20 * 问题2:return函数只存在于判断模块中的时候,如果判断模块不满足,则运行到最后可能造成无返回值 21 */ 22 23 /* 24 * 注意:这种指针做入参的情况,一般都新建一个指针,不要在原指针上操作,要养成好习惯; 25 * 同时,新的链表和原链表不同,要重新建立结点; 26 */ 27 28 /* 29 * 问题3:当判断太多时,可以使用比较判断语句,增加可读性 cur = (l1 == NULL ? l1 : l2); 30 */ 31 32 33 int flag = 0; 34 ListNode *head = l1; 35 36 if (!l1) 37 return l2; 38 if (!l2) 39 return l1; 40 41 while (true) { 42 l1->val += l2->val + flag; 43 if (l1->val > 9) { 44 l1->val -= 10; 45 flag = 1; 46 } else { 47 flag = 0; 48 } 49 if (l1->next && l2->next) { 50 l1 = l1->next; 51 l2 = l2->next; 52 } else { 53 break; 54 } 55 } 56 57 if (l1->next && !l2->next) { 58 while (l1->next) { 59 l1 = l1->next; 60 l1->val += flag; 61 if (l1->val > 9) { 62 l1->val -= 10; 63 flag = 1; 64 } else { 65 flag = 0; 66 } 67 } 68 if (flag == 1) { 69 ListNode *newNode = new ListNode(1); 70 l1->next = newNode; 71 } 72 return head; 73 } 74 75 if (!l1->next && l2->next) { 76 l1->next = l2->next; 77 while (l2->next) { 78 l2 = l2->next; 79 l2->val += flag; 80 if (l2->val > 9) { 81 l2->val -= 10; 82 flag = 1; 83 } else { 84 flag = 0; 85 } 86 } 87 if (flag == 1) { 88 ListNode *newNode = new ListNode(1); 89 l2->next = newNode; 90 } 91 return head; 92 } 93 94 if(!l1->next && !l2->next && flag == 1) { 95 ListNode *newNode = new ListNode(1); 96 l1->next = newNode; 97 } 98 return head; 99 } 100 };
再做;