classLinkedListNode:def__init__(self,data,next_node):self.data=dataself.next_node=next_nodedefsum_up_two_linked_lists(ll0,ll1,carry):# base caseifll0isNoneandll1isNoneandcarry==0:returnNonedata=carryifll0isnotNone:data+=ll0.dataifll1isnotNone:data+=ll1.dataresult=LinkedListNode(-1,None)result.data=dataifll0isnotNoneorll1isnotNone:next_ll0=Nonenext_ll1=Noneifll0isnotNone:next_ll0=ll0.next_nodeifll1isnotNone:next_ll1=ll1.next_nodecarry=result.data//10result.next_node=sum_up_two_linked_list(next_ll0,next_ll1,carry)returnresult
# reverseしたリストのheadを返すdefreverse_linked_list(head):# base caseifhead.next_nodeisNone:returnLinkedListNode(head.data,None)reversed_head=reverse_linked_list(head.next_node)reversed_tail=reversed_headwhilereversed_tail.next_nodeisnotNone:reversed_tail=reversed_tail.next_nodereversed_tail.next_node=LinkedListNode(head.data,None)returnreversed_headreverse_linked_list(sum_up_two_linked_lists(reverse_linked_list(ll0),reverse_linked_list(ll1),0,))