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

    再做;

  • 相关阅读:
    不使用动态sql语句,正确书写case when中的null处理
    VC项目配置详解(转)
    JAXWS 访问SSL 的WebService 老是HTTP transport error: Connection refused错误的解决办法。
    [转]为什么开发人员工作10多年了还会迷茫?没有安全感?
    Tomcat 6.0.24 不兼容的APR版本问题
    WPF滚动条嵌套,响应鼠标滑轮事件的处理
    SqlServer无备份下误删数据恢复
    今天发现竟然有一个粉丝!!!
    好用的开源轻量级DHCP和DNS服务软件“Dual DHCP DNS Server”
    Windows下源码获取
  • 原文地址:https://www.cnblogs.com/huxiao-tee/p/4300493.html
Copyright © 2020-2023  润新知