_莫相逢

导航

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

 

 

 

posted on 2019-04-19 14:44  莫晓风  阅读(110)  评论(0编辑  收藏  举报