From 265aaca2b62ce1edd72fb1b61d48209222daf293 Mon Sep 17 00:00:00 2001 From: SquidSpirit Date: Tue, 11 Feb 2025 00:14:29 +0800 Subject: [PATCH] feat: 2_add_two_numbers --- 2_add_two_numbers/main.cpp | 53 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 2_add_two_numbers/main.cpp diff --git a/2_add_two_numbers/main.cpp b/2_add_two_numbers/main.cpp new file mode 100644 index 0000000..480d8af --- /dev/null +++ b/2_add_two_numbers/main.cpp @@ -0,0 +1,53 @@ +#include +using namespace std; + + +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 { +public: + ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { + ListNode* result = new ListNode{0, nullptr}; + ListNode* lastNode = nullptr; + ListNode* currentNode = result; + int carry = 0; + + while (l1 != nullptr || l2 != nullptr) { + int n1 = 0, n2 = 0; + + if (l1 != nullptr) { + n1 = l1->val; + l1 = l1->next; + } + + if (l2 != nullptr) { + n2 = l2->val; + l2 = l2->next; + } + + int s = n1 + n2 + carry; + carry = s / 10; + s = s % 10; + + currentNode->val = s; + currentNode->next = new ListNode{0, nullptr}; + lastNode = currentNode; + currentNode = currentNode->next; + } + + if (carry > 0) { + currentNode->val = carry; + } else if (lastNode != nullptr) { + delete lastNode->next; + lastNode->next = nullptr; + } + + return result; + } +};