2. Add Two Numbers

개굴·2024년 6월 25일

leetcode

목록 보기
40/51
  • python3

Problem

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.

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.

Plan Solution

  1. Set the carry for handling the overflow.
  2. When l1 and l2 exist, add up all values with carry.
  3. Move next steps.
  4. Return the head.

Code

# 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]:
        carry = 0
        dummy = ListNode(0)
        current = dummy

        while l1 or l2:
            sumVal = carry
            if l1:
                sumVal += l1.val
                l1 = l1.next
            if l2:
                sumVal += l2.val
                l2 = l2.next
            
            carry = sumVal // 10
            digit = sumVal % 10
            current.next = ListNode(digit)
            current = current.next
        
        if carry:
            current.next = ListNode(carry)

        return dummy.next

Result

  • Time Complexity : O(n)
  • Space Complexity : O(n)
profile
알쏭달쏭혀요

0개의 댓글