vault backup: 2022-09-08 15:40:52

This commit is contained in:
juan 2022-09-08 15:40:52 +08:00
parent 484bcdf915
commit 45bb95ff62
2 changed files with 60 additions and 2 deletions

4
.obsidian/app.json vendored
View file

@ -13,5 +13,7 @@
"defaultViewMode": "preview", "defaultViewMode": "preview",
"fileSortOrder": "byCreatedTime", "fileSortOrder": "byCreatedTime",
"showFrontmatter": true, "showFrontmatter": true,
"autoPairMarkdown": false "autoPairMarkdown": false,
"strictLineBreaks": true,
"readableLineLength": true
} }

View file

@ -74,6 +74,62 @@ You may assume the two numbers do not contain any leading zero, except the numbe
Done by using elementary math. Done by using elementary math.
Use only one Use only one variable `tmp` to keep track of sum of 2
digits and carries.
### Solution ### Solution
```cpp
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
ListNode *appendNumber(ListNode *ptr, int num) {
ListNode *ans = new ListNode(num, nullptr);
ptr->next = ans;
return ans;
}
public:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
ListNode *ptr1 = l1, *ptr2 = l2;
// the minimum size is 1, so we can safely do this.
int tmp = ptr1->val + ptr2->val;
ListNode *ans = new ListNode(tmp % 10);
ListNode *tail = ans;
tmp /= 10;
ptr1 = ptr1->next;
ptr2 = ptr2->next;
while (ptr1 || ptr2 || tmp) {
if (ptr1) {
tmp += ptr1->val;
ptr1 = ptr1->next;
}
if (ptr2) {
tmp += ptr2->val;
ptr2 = ptr2->next;
}
tail = appendNumber(tail, tmp % 10);
tmp /= 10;
}
return ans;
}
};
```