From 8208854e3d304cb0b26a1b9793f8dd3eccddc7f5 Mon Sep 17 00:00:00 2001 From: Deven <63876261+devenperez@users.noreply.github.com> Date: Wed, 26 Nov 2025 17:04:38 -0500 Subject: [PATCH] Time: 3 ms (73%), Space: 17.8 MB (84.61%) - LeetHub --- 0002-add-two-numbers/0002-add-two-numbers.py | 49 ++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 0002-add-two-numbers/0002-add-two-numbers.py diff --git a/0002-add-two-numbers/0002-add-two-numbers.py b/0002-add-two-numbers/0002-add-two-numbers.py new file mode 100644 index 0000000..919bb9d --- /dev/null +++ b/0002-add-two-numbers/0002-add-two-numbers.py @@ -0,0 +1,49 @@ +# 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]: + """ + Complexities: + Time: O(n) + Space: O(1) + + where n = max(len(l1), len(l2)) + """ + + # Addition by place value + currNode1 = l1 + currNode2 = l2 + sumNode = None + tailNode = None + carry = 0 + placeValue = 1 + + # Loop through nodes until reached end of both lists + while currNode1 or currNode2: + v1 = currNode1.val if currNode1 else 0 + v2 = currNode2.val if currNode2 else 0 + + sumVal = (v1 + v2 + carry) * placeValue + val = sumVal % 10 + carry = sumVal // 10 + newNode = ListNode(val) + + if sumNode == None: + sumNode = newNode + else: + tailNode.next = newNode + + tailNode = newNode + + currNode1 = currNode1.next if currNode1 else None + currNode2 = currNode2.next if currNode2 else None + + if carry: + tailNode.next = ListNode(carry) + + return sumNode or ListNode(0) + + \ No newline at end of file