문제링크
LinkedList 형태로 두 개의 수가 주어진다.
이들의 합을 LinkedList 형태로 표현하라.
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
def Casting(l: ListNode) -> int:
# ListNode로 주어진 값을 Int로 변환
num, i = 0, 1
while l:
num += l.val * i
l = l.next
i *= 10
return num
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
# 변환한 값의 합
temp = Casting(l1) + Casting(l2)
# LinkedList의 시작
answer = ListNode()
# LinkedList의 끝
last = answer
while True :
# 나머지 수
last.val = temp % 10
# Carry(올림 수)
temp //= 10
# 끝이 아니면 뒷처리를 위해 ListNode() 추가
if temp != 0:
last.next = ListNode()
last = last.next
else :
break
return answer
LeetCode Solution
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
# 답안은 이 다음부터 시작
dummyHead = ListNode()
# 현재위치(마지막)
curr = dummyHead
# 올림 수
carry = 0
while l1 or l2:
x = 0 if l1 l1.val
y = 0 if l2 l2.val
# 합
temp = carry + x + y
# 올림
carry = temp // 10
# 나의 답안과 다른 부분(뒷 자리를 먼저 만들지 않음)
curr.next = ListNode(temp % 10)
curr = curr.next
# l1에 남은 수가 있는가
if l1 :
l1 = l1.next
# l2에 남은 수가 있는가
if l2 :
l2 = l2.next
# 올림 수가 남았다면 한 자리 추가
if carry > 0:
curr.next = ListNode(carry)
# dummyHead의 다음부터 시작
return dummyHead.next
뒤에 한자리를 먼저 넣어주니 이를 제거하는 방법을 찾다가 시간을 다 보낸 것 같다. Python의 del 함수로는 메모리 영역 해제가 되지 않는다.
그리고 answer.next를 반환하면 되는데 이걸 깔끔하게 하고싶어서 이리저리 생각해봤는데 시간을 낭비하는 요인이 된 것 같다.
알게된 점
Python의 del은 변수를 제거할 뿐, 메모리 영역을 해제하지 않습니다.
관련 링크