두 연결 리스트 l1=[2,4,3]
, l2=[5,6,4]
가 주어졌을 때 각 연결 리스트의 요소들을 거꾸로 연결해 342
, 465
를 만든 후 더한 결과 807
을 다시 역순으로 만든 연결 리스트를 반환해라.
1) 연결 리스트
l1
,l2
의 역순을 구한다. =>rev1
,rev2
2) 역순 연결 리스트의 val만 연결한다. =>str1
,str2
3) 두 연결 리스트의 val을 더한다. =>sum
4) 문자열sum
의 각 자리로 이루어진 연결리스트를 만든다.sum
을 리스트로 만든 후, 리스트를 다시 연결 리스트로 만들었다. =>res_node
5)res_node
의 역순을 구한다. =>rev_node
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def reverseList(self, head: ListNode):
prev, curr = None, head
while curr:
next = curr.next
curr.next = prev
prev = curr
curr = next
return prev
def list2node(self, list) -> ListNode:
new_node = ListNode()
curr = new_node
for i in range(len(list)):
curr.next = ListNode(list[i])
curr = curr.next
return new_node.next
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
str1, str2 = '', ''
rev1 = self.reverseList(l1)
rev2 = self.reverseList(l2)
while rev1:
str1 += str(rev1.val)
rev1 = rev1.next
while rev2:
str2 += str(rev2.val)
rev2 = rev2.next
sum = str(int(str1) + int(str2))
sum_list = []
for i in range(len(sum)):
sum_list.append(int(sum[i]))
print("sum_list: ", sum_list)
res_node = self.list2node(sum_list)
rev_node = self.reverseList(res_node)
return rev_node
ListNode 클래스
: 연결 리스트는 값 val
과 다음 노드를 가리키는 next
로 이루어진다.
reverseList()
: 이전 역순 연결 리스트를 구하는 포스팅에서 구현한 함수와 동일하다.
list2node()
: 리스트의 요소로 이루어진 연결 리스트를 만든다.
나는 두 연결 리스트의 val를 더하기 위해 val을 str로 변환해 연결한 후 정수형으로 만들어 더했다. 더한 결과를 순서대로 int -> str -> list -> ListNode로 변환했다.