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

     

     

  • 相关阅读:
    基本MVVM 和 ICommand用法举例(转)
    WPF C# 命令的运行机制
    628. Maximum Product of Three Numbers
    605. Can Place Flowers
    581. Shortest Unsorted Continuous Subarray
    152. Maximum Product Subarray
    216. Combination Sum III
    448. Find All Numbers Disappeared in an Array
    268. Missing Number
    414. Third Maximum Number
  • 原文地址:https://www.cnblogs.com/moxiangfeng/p/10735866.html
Copyright © 2011-2022 走看看