六一的部落格


关关难过关关过,前路漫漫亦灿灿。



LeetCode - Add Two Numbers

使用单向链表实现加法运算

因为从个位开始, 而链表单向, 存入数据时, 从个位开始


解答

  1. 考虑到生命周期, 在动态内存中构造节点
  2. 有数据才构造节点, 构造节点操作在循环开始处
  3. 考虑到第一个节点也从next开始, 添加头节点
 1/**
 2 * Definition for singly-linked list.
 3 * struct ListNode {
 4 *     int val;
 5 *     ListNode *next;
 6 *     ListNode() : val(0), next(nullptr) {}
 7 *     ListNode(int x) : val(x), next(nullptr) {}
 8 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 9 * };
10 */
11class Solution {
12public:
13    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
14        ListNode head, *p = &head;
15        auto sum = 0;
16
17        while (l1 || l2) 
18        {
19            p->next = new ListNode;
20            p = p->next;
21
22            if (l1)
23            {
24                sum += l1->val;
25                l1 = l1->next;
26            }
27            if (l2)
28            {
29                sum += l2->val;
30                l2 = l2->next;
31            }
32
33            p->val = (sum % 10); 
34            sum /= 10;
35        }
36
37        if (sum)
38        {
39            p->next = new ListNode;
40            p = p->next;
41            p->val = sum;
42        }
43
44        return head.next;
45    }
46};

Add Two Numbers


LeetCode - Add Two Numbers

使用单向链表实现加法运算

因为从个位开始, 而链表单向, 存入数据时, 从个位开始


解答

  1. 考虑到生命周期, 在动态内存中构造节点
  2. 有数据才构造节点, 构造节点操作在循环开始处
  3. 考虑到第一个节点也从next开始, 添加头节点
 1/**
 2 * Definition for singly-linked list.
 3 * struct ListNode {
 4 *     int val;
 5 *     ListNode *next;
 6 *     ListNode() : val(0), next(nullptr) {}
 7 *     ListNode(int x) : val(x), next(nullptr) {}
 8 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 9 * };
10 */
11class Solution {
12public:
13    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
14        ListNode head, *p = &head;
15        auto sum = 0;
16
17        while (l1 || l2) 
18        {
19            p->next = new ListNode;
20            p = p->next;
21
22            if (l1)
23            {
24                sum += l1->val;
25                l1 = l1->next;
26            }
27            if (l2)
28            {
29                sum += l2->val;
30                l2 = l2->next;
31            }
32
33            p->val = (sum % 10); 
34            sum /= 10;
35        }
36
37        if (sum)
38        {
39            p->next = new ListNode;
40            p = p->next;
41            p->val = sum;
42        }
43
44        return head.next;
45    }
46};