You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
처음부터 문제 이해가 어려웠다. 문장을 꼼꼼히 읽고 예제 케이스도 잘 살펴봐야한다.
class Solution:
def addTwoNumbers(self, l1: Optional[ListNode],
l2: Optional[ListNode]) -> Optional[ListNode]:
results = None
l11, l22 = l1, 2
while 1:
if l11.next is None:
break
res = l11.val + l22.val
if res > 9:
res = int(str(res)[1])
res_node = ListNode(res)
if results is None:
results = res_node
else:
results.next = res_node
l11 = l11.next
l22 = l22.next
return results
Input [2,4,3], [5,6,4]
, output [7,0]
while loop 시작에 break문을 걸어놨다.
class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
results = None
carry = 0
while 1:
if l1 is None or l2 is None:
break
val1, val2 = 0,0
if l1 is not None:
val1 = l1.val
l1 = l1.next
if l2 is not None:
val2 =l2.val
l2 = l2.next
curr_sum = val1 + val2 + carry
if curr_sum > 9:
carry = 1
curr_sum -= 10
else:
carry = 0
if results is None:
results = ListNode(curr_sum)
else:
results.next = ListNode(curr_sum)
results = results.next
return results
return으로주는것이 포인트가 업데이트 된 results
이다.. 때문에 마지막 노드의 결과만 출력됨.
class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
results = ListNode()
answer = results
carry = 0
while 1:
if l1 is None and l2 is None:
break
val1, val2 = 0,0
if l1 is not None:
val1 = l1.val
l1 = l1.next
if l2 is not None:
val2 =l2.val
l2 = l2.next
curr_sum = val1 + val2 + carry
if curr_sum > 9:
carry = 1
curr_sum -= 10
else:
carry = 0
results.next = ListNode(curr_sum)
results = results.next
return answer.next
제일 마지막 숫자까지 전부 더 했는데 carry
가 생긴 경우 더해줘야한다. 하지만 현재 코드상으론 리스트의 노드숫자만 고려하고 덧셈으로 생긴 carry
는 누락시켰다.
class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
results = ListNode()
answer = results
carry = 0
while 1:
if l1 is None and l2 is None:
break
val1, val2 = 0,0
if l1 is not None:
val1 = l1.val
l1 = l1.next
if l2 is not None:
val2 =l2.val
l2 = l2.next
curr_sum = val1 + val2 + carry
if curr_sum > 9:
carry = 1
curr_sum -= 10
else:
carry = 0
results.next = ListNode(curr_sum)
results = results.next
if carry:
results.next = ListNode(1)
return answer.next