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を返す!!
*連結リスト初心者のため間違いが多分にあると思います。ごめんなさい。