zoukankan      html  css  js  c++  java
  • LeetCode 2 两数相加

    题目:

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

    您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    示例:

    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
    输出:7 -> 0 -> 8
    原因:342 + 465 = 807

    解题思路:

    逐位扫描相加,这里要注意处理进位问题即可。

    在提交这道题时,经常出现对 runtime error: member access within null pointer of type 'ListNode' 的问题,主要原因是我对一下还没有指定指向的指针进行数据成员操作,这会引起报错。参考了一下网上大牛的写法,在使用一个指针时就以初始化的形式进行赋值,如:

    ListNode* p = new ListNode(-1);  
    p->next->val = x;    //这是会报错的

    为了解决上面这种情况,我们可以使用一下方法:

    p->next = new ListNode(x);

    代码:

     

     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         int JW = 0;
    13         ListNode* ans = new ListNode(-1);
    14         ListNode* p = ans;
    15         while(l1 && l2)
    16         {
    17             if((l1->val + l2->val + JW) / 10 > 0)
    18             {
    19                 p->next = new ListNode((l1->val + l2->val + JW) % 10);
    20                 JW = 1;
    21             }
    22             else
    23             {
    24                 p->next = new ListNode(l1->val + l2->val + JW);
    25                 JW = 0;
    26             }
    27             l1 = l1->next;
    28             l2 = l2->next;
    29             p = p->next;
    30         }
    31         while(l1)
    32         {
    33             if((l1->val + JW) / 10 > 0)
    34             {
    35                 p->next = new ListNode((l1->val + JW) % 10);
    36                 JW = 1;
    37             }
    38             else
    39             {
    40                 p->next = new ListNode(l1->val+JW);
    41                 JW = 0;
    42             }
    43             l1 = l1->next;
    44             p = p->next;
    45         }
    46         while(l2)
    47         {
    48             if((l2->val + JW) / 10 > 0)
    49             {
    50                 p->next = new ListNode((l2->val + JW) % 10);
    51                 JW = 1;
    52             }
    53             else
    54             {
    55                 p->next = new ListNode(l2->val + JW);
    56                 JW = 0;
    57             }
    58             l2 = l2->next;
    59             p = p->next;
    60         }
    61         if(JW)
    62         {
    63             p->next = new ListNode(JW);
    64             p = p->next;
    65         }
    66         return ans->next;
    67     }
    68 };

     

     

  • 相关阅读:
    JS实现菜单滚动到一定高度后固定
    原生js如何获取某一元素的高度
    在Vue项目中,添加的背景图片在服务器上不显示,如何处理
    单行文本截断 text-overflow
    使用line-height垂直居中在安卓手机上效果不好
    css 苹方字体
    十二. for of 示例 (可以解决大多数应用场景)
    npm详解
    webpack搭建服务器,随时修改刷新
    探讨弹性布局Flexible Box
  • 原文地址:https://www.cnblogs.com/moxiangfeng/p/10735866.html
Copyright © 2011-2022 走看看