Leetcode(2)

这个题,简而言之就是做一个加法,但是加法的数字不是存储为int格式,而是以linked list的形式储存。同时它返回也要求是一个linked list.所以这个题有两个难点,一是设计出加法计算的算法,二是如何使用构造函数构造出一个新的linked list.关于列表的构造,其实我一直不是很熟练,主要是这个结构有些抽象,而且这个涉及类的构造。说实话我一直很晕。

下面我们先看看答案:

Definition for singly-linked list.

struct ListNode {

int val;

ListNode *next;

ListNode(int x) : val(x), next(NULL) {}

};
/ class Solution { public: ListNode addTwoNumbers(ListNode* l1, ListNode* l2) {
if (l1 == NULL and l2 == NULL) return NULL;
else if (l1 == NULL) return l2;
else if (l2 == NULL) return l1;

int a = l1->val + l2->val;

ListNode *p = new ListNode(a % 10);

p->next = addTwoNumbers(l1->next,l2->next);

if (a >= 10) p->next = addTwoNumbers(p->next, new ListNode(1));

return p; }

1.题目给的节点类的设计要记住,后面会围绕这个进行构造。

2.本题使用的是递归的形式,所以要将基类情况进行说明。

3. 构造节点有两种形式 Node* p = new Node(val),这里使用的是指针的构造,p是指向Node结构的指针。Node p= Node(val)。但是我们要使用->,所以我们选择了第一种。

4.最后一行是因为如果超过了10 要加一

留下评论