문제 설명


You are given twonon-emptylinked lists representing two non-negative integers. The digits are stored inreverse 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.

Example 1:

Input: l1 = [2,4,3], l2 = [5,6,4]
Output: [7,0,8]
Explanation: 342 + 465 = 807.


Example 2:

Input: l1 = [0], l2 = [0]
Output: [0]


Example 3:

Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
Output: [8,9,9,9,0,0,0,1]


Constraints:

  • The number of nodes in each linked list is in the range[1, 100].
  • 0 <= Node.val <= 9
  • It is guaranteed that the list represents a number that does not have leading zeros.

풀이 과정


  1. 먼저 입력받은 두개의 Linked-List를 따라 이동하면서 더해야 하는 수 a,b를 구한다.
    • idx를 10씩 곱해주면서 val * idx를 더해주면 된다.
  2. a, b를 구해주었다면, 합계를 구한 다음 문자열로 바꾸고 뒤집는다.
  3. 뒤집은 수 숫자 한자리씩 Linked-List를 구성하여 주면 된다.
    • 한자리씩 노드를 만들어서, 맨 마지막 노드에 붙여주면 된다.
    • 헤드 노드를 따로 만들어주어야 함 => 리턴할 때 사용
  4. Linked-List의 헤드 노드를 리턴해주면 된다.

소스 코드


# 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]:
        a = 0
        idx = 1
        temp = l1
        while temp:
            a += temp.val * idx
            idx *= 10
            temp = temp.next

        b = 0
        idx = 1
        temp = l2
        while temp:
            b += temp.val * idx
            idx *= 10
            temp = temp.next

        print(a, b)
        c = str(a + b)[::-1]

        head = None
        last = None
        for i in c:
            node = ListNode(val=int(i))
            if head is None:
                head = node

            if last is not None:
                last.next = node
                last = node
            else:
                last = node

        return head

+ Recent posts