LeetCode 2. Add Two Numbers(連結リスト)

# 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]:
        def check(sum):
            if sum >= 10:
                count = 1
                sum -= 10
            else:
                count = 0
            return sum, count
        head = ListNode()
        count = 0
        current = head
        while l1!=None or l2!=None:
            if l1 is None:
                sum = l2.val + count
                sum, count = check(sum)
                current.next = ListNode(sum)
            elif l2 is None:
                sum = l1.val + count
                sum, count = check(sum)
                current.next = ListNode(sum)
            else:
                sum = l1.val + l2.val + count
                sum, count = check(sum)
                current.next = ListNode(sum)
            current = current.next
            if l1!=None:
                l1 = l1.next
            if l2!=None:
                l2 = l2.next
        if count != 0:
            current.next = ListNode(count)
        return head.next

久々連結リスト!

新しいリストは head = ListNode() で作れる

今見ているノードのvalに値を格納してしまうと、次のノードにアクセスできなくなってしまう(?)のでわざと次のノードに値を格納

ListNode(sum)とすることでsumを連結リストの要素にできる!

ノードが存在するかどうかは l1 != None で確かめられる
(これ、木だとl1 is not Noneって書いてるんだけどややこしい…)

headの次のノードからしか利用していないのでhead.nextを返す!!


*連結リスト初心者のため間違いが多分にあると思います。ごめんなさい。