계속 실행하면서 확인하고 싶은데 자주 실행시키면 오류가 발생해서 따로 로컬 jupyter에서 실행시켰다.
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def __repr__(self):
return f"ListNode{{val: {self.val}, next: {repr(self.next)}}}"
l1 = ListNode(2, ListNode(4, ListNode(3)))
l2 = ListNode(5, ListNode(6, ListNode(4)))
l1 = ListNode(9, ListNode(9, ListNode(9, ListNode(9, ListNode(9, ListNode(9, ListNode(9)))))))
l2 = ListNode(9, ListNode(9, ListNode(9, ListNode(9))))
print(l1)
print(l2)
'''
ListNode{val: 9, next: ListNode{val: 9, next: ListNode{val: 9, next: ListNode{val: 9, next: ListNode{val: 9, next: ListNode{val: 9, next: ListNode{val: 9, next: None}}}}}}}
ListNode{val: 9, next: ListNode{val: 9, next: ListNode{val: 9, next: ListNode{val: 9, next: None}}}}
'''
코드
# 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]:
# 더미 헤드 만들기
dummyHead = ListNode(0)
curr = dummyHead
carry = 0 # 올림수 초기화
# l1, l2가 None이 아니거나 올림수(carry)의 값이 0이 아닌경우에 반복
# l1, l2중 하나가 None인 경우(둘의 길이가 다를 경우)에도 승수가 있을 경우에 계속 작동
while l1 is not None or l2 is not None or carry != 0:
'''
본래 l1과 l2가 같은 경우에는
l1_num = l1.val
l2_num = l2.val
이것으로 작동 했지만 둘의 길이가 달랐을 때에는 l1.val, l2.val 둘 중 하나에서 오류가 발생했다.
어차피 계산식이 끝난 경우(l1, l2 모두 None이 나오고 올림수가 0인 경우)에는 자동으로 종료되기 때문에 계산 할 때 0 대입
'''
l1_num = l1.val if l1 is not None else 0
l2_num = l2.val if l2 is not None else 0
# 두 수와 올림수를 더한다(기본값 0)
num_sum = l1_num + l2_num + carry
# 만약 10이 넘어가면 올림수를 1로 한다.
carry = num_sum // 10
# 해당 값으로 새로운 ListNode를 만든다.
new_node = ListNode(num_sum % 10)
# dummyHead의 끝부분(curr)에 새로 만든 ListNode를 연결한다.
curr.next = new_node
# 다시 노드의 끝 부분으로 간다.
curr = curr.next
'''
여기도 마찬가지로 길이가 다를 경우에는 next 값이 없어 에러가 발생한다.
따라서 None이 아닌 경우에만 next로 이동하고 None인 경우에는 None을 계속 지속시킨다.
'''
l1 = l1.next if l1 is not None else None
l2 = l2.next if l2 is not None else None
print(dummyHead.next)
# 값 보기 편하게 출력(이 부분을 사이트에서 주석을 없애면 에러가 발생한다.)
# print('[', end='')
# while dummyHead.next is not None:
# print(dummyHead.next.val, end=' ')
# dummyHead = dummyHead.next
# print(']', end='')
return dummyHead.next