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 };

 

再做;

posted @ 2015-02-26 05:06  胡潇  阅读(145)  评论(0编辑  收藏  举报