Add Two Numbers
2024年1月31日 2024年1月31日
使用单向链表实现加法运算
因为从个位开始, 而链表单向, 存入数据时, 从个位开始
解答
- 考虑到生命周期, 在动态内存中构造节点
- 有数据才构造节点, 构造节点操作在循环开始处
- 考虑到第一个节点也从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};