역순으로 저장된 연결 리스트의 숫자를 더하라
(2 -> 4 -> 3) + (5 -> 6 -> 4)
(7 -> 0 -> 8)
class Solution:
# 연결리스트 역순으로 뒤집기
def reversenode(self, head: Optional[ListNode]):
node, prev = head, None
while node:
next, node.next = node.next, prev
prev, node = node, next
return prev
# 연결리스트 리스트화
def to_list(self, list: ListNode):
res = []
while list:
res.append(list.val)
list = list.next
return res
# 리스트 덧셈
def addlist(self, list1:list, list2:list):
l1 = int("".join(str(i) for i in list1))
l2 = int("".join(str(i) for i in list2))
res = l1 + l2
return str(res)
# 덧셈된 리스트 다시 연결리스트화
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
a = self.to_list(self.reversenode(l1))
b = self.to_list(self.reversenode(l2))
res = self.addlist(a,b)
new:ListNode = None
for i in res:
node = ListNode(val=i)
node.next = new
new = node
return new
342 + 456 = 807
으로 linked-list를 역순으로 만들고 만든 연결리스트를 리스트로 추가시킨 후 리스트를 정수로 만들어 덧셈을 실행 후 문자열로 반환후 문자열을 연결리스트로 역순으로 반환한다.
연결리스트의 기초 선물 세트같은 문제였다. 연결리스트 뒤집기, 연결리스트 리스트에 추가하기, 문자열을 연결리스트로 만들기까지 모두 한번씩 풀어보았던 연결리스트 기초 문제들을 응용해서 풀 수 있었던 재미있는 문제였다