Leetcode # 445. Add Two Numbers II
- 2023.07.25
- ★★ Medium LeetCode Linked List
https://leetcode.com/problems/add-two-numbers-ii
Solution
Time Complexity: O(max(len(l1), len(l2)))
Space Complexity: O(1)
(The input and output generally do not count towards the space complexity.)
class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
l_len = [0, 0]
for i, cur in enumerate([l1, l2]):
while cur:
l_len[i] += 1
cur = cur.next
i, max_len = 0, max(l_len[1], l_len[0])
head = carry_from = ListNode(0, ListNode())
cur = head.next
cur1 = l1 if i == max_len - l_len[0] else None
cur2 = l2 if i == max_len - l_len[1] else None
while cur1 or cur2:
d1 = cur1.val if cur1 else 0
d2 = cur2.val if cur2 else 0
_sum = d1 + d2
cur.val = _sum % 10
if _sum // 10 > 0:
# carry_from, Node(9), Node(9), ..., Node(9), cur
carry_from.val += 1
start = carry_from.next
while start != cur:
start.val = 0
start = carry_from = start.next
if cur.val < 9:
carry_from = cur
i += 1
cur1 = cur1.next if cur1 else (l1 if i == max_len - l_len[0] else None)
cur2 = cur2.next if cur2 else (l2 if i == max_len - l_len[1] else None)
if cur1 or cur2:
cur.next = ListNode()
cur = cur.next
return head if head.val > 0 else head.next
解法:逆序
Solution: Using Stack
Solution: Reverse Given Linked Lists
Last Updated on 2023/08/16 by A1go