diff --git a/01-15/2.Add-Two-Numbers/6.cpp b/01-15/2.Add-Two-Numbers/6.cpp new file mode 100644 index 0000000..6846386 --- /dev/null +++ b/01-15/2.Add-Two-Numbers/6.cpp @@ -0,0 +1,42 @@ +#if __has_include("../../debug.hpp") +#include "../../debug.hpp" +#endif +// ここまでローカルでのデバッグ用なので気にしないでください -------------------- + +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) {} +}; + +// <時間> +// 5分 +// <感想> +// 久しぶりに書き直したら5.cppとほぼ同じものが出来上がった。 +// <コメント> +// - 特になし。 +class Solution { + public: + ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { + int carry = 0; + ListNode sentinel, *node = &sentinel; + while (l1 || l2 || carry) { + int sum = carry; + if (l1) { + sum += l1->val; + l1 = l1->next; + } + if (l2) { + sum += l2->val; + l2 = l2->next; + } + node = node->next = new ListNode(sum % 10); + carry = sum / 10; + } + return sentinel.next; + } +};