From 6af7639f6d4f7512932e6fc8fa134e17c72bcb20 Mon Sep 17 00:00:00 2001 From: Rytxxx Date: Tue, 6 Jan 2026 21:38:33 -0800 Subject: [PATCH 1/2] 2-add-two-numbers --- 2-add-two-numbers/memo.md | 13 +++++++++++++ 2-add-two-numbers/steo2.py | 28 ++++++++++++++++++++++++++++ 2-add-two-numbers/step1.py | 25 +++++++++++++++++++++++++ 2-add-two-numbers/step3.py | 30 ++++++++++++++++++++++++++++++ 4 files changed, 96 insertions(+) create mode 100644 2-add-two-numbers/memo.md create mode 100644 2-add-two-numbers/steo2.py create mode 100644 2-add-two-numbers/step1.py create mode 100644 2-add-two-numbers/step3.py diff --git a/2-add-two-numbers/memo.md b/2-add-two-numbers/memo.md new file mode 100644 index 0000000..1777c4d --- /dev/null +++ b/2-add-two-numbers/memo.md @@ -0,0 +1,13 @@ +## step1で考えたこと + +和が10以上になった時にどう繰り上げを行うか。 + +dummyというか結果を格納するList Nodeは必要そう + +module 10 でのあまりをNodeの値として使えそう + +## step1を振り返って +問題を解く方針はだいたいあっていたが、コードの細かい書き方や、まだLinked Listの書き方がイマイチになっていることに気づいた。 + +今回の場合、和の一の位の数をNodeの後ろにどんどん追加していく必要があるからtailを使う. +もし、問題の特性が、Nodeを前に前に追加していく場合だと、今度はtailではなくheadを使って操作していく。 \ No newline at end of file diff --git a/2-add-two-numbers/steo2.py b/2-add-two-numbers/steo2.py new file mode 100644 index 0000000..97e2174 --- /dev/null +++ b/2-add-two-numbers/steo2.py @@ -0,0 +1,28 @@ +# Definition for singly-linked list. +# class ListNode: +# def __init__(self, val=0, next=None): +# self.val = val +# self.next = next +class Solution: + def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]: + result = ListNode(0) + tail = result + list1 = l1 + list2 = l2 + carry = 0 + + while list1 or list2 or carry: + x = list1.val if list1 else 0 + y = list2.val if list2 else 0 + + total = x + y + carry + carry = total // 10 + digit = total % 10 + + tail.next = ListNode(digit) + tail = tail.next + if list1: + list1 = list1.next + if list2: + list2 = list2.next + return result.next \ No newline at end of file diff --git a/2-add-two-numbers/step1.py b/2-add-two-numbers/step1.py new file mode 100644 index 0000000..be7db01 --- /dev/null +++ b/2-add-two-numbers/step1.py @@ -0,0 +1,25 @@ +# 動かないコード + +# Definition for singly-linked list. +# class ListNode: +# def __init__(self, val=0, next=None): +# self.val = val +# self.next = next +class Solution: + def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]: + result = ListNode(0, l1) + list1 = l1.val + list2 = l2.val + res = 0 + + while list1 or list2: + if res > 10: + res = list1.val + list2.val + 1 + else: + res = list1.val + list2.val + if res >= 10: + result.next = res % 10 + else: result.next = res + list1 = list1.next + list2 = list2.next + return result.next \ No newline at end of file diff --git a/2-add-two-numbers/step3.py b/2-add-two-numbers/step3.py new file mode 100644 index 0000000..2ea40f8 --- /dev/null +++ b/2-add-two-numbers/step3.py @@ -0,0 +1,30 @@ +# step2のコードをもう少し簡潔に書いたVersion + +# Definition for singly-linked list. +# class ListNode: +# def __init__(self, val=0, next=None): +# self.val = val +# self.next = next +class Solution: + def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]: + dummy = ListNode() + res = dummy + + total = carry = 0 + + while l1 or l2 or carry: + total = carry + + if l1: + total += l1.val + l1 = l1.next + if l2: + total += l2.val + l2 = l2.next + + digit = total % 10 + carry = total // 10 + dummy.next = ListNode(digit) + dummy = dummy.next + + return res.next \ No newline at end of file From a108d47314b0187c246a7d71f28e2f0095e1c90c Mon Sep 17 00:00:00 2001 From: Rytxxx Date: Fri, 9 Jan 2026 13:58:37 -0800 Subject: [PATCH 2/2] fix: way to move pointer --- 2-add-two-numbers/step3.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/2-add-two-numbers/step3.py b/2-add-two-numbers/step3.py index 2ea40f8..154ec91 100644 --- a/2-add-two-numbers/step3.py +++ b/2-add-two-numbers/step3.py @@ -8,7 +8,7 @@ class Solution: def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]: dummy = ListNode() - res = dummy + node = dummy total = carry = 0 @@ -24,7 +24,7 @@ def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optio digit = total % 10 carry = total // 10 - dummy.next = ListNode(digit) - dummy = dummy.next + node.next = ListNode(digit) + node = node.next - return res.next \ No newline at end of file + return dummy.next \ No newline at end of file