LeetCode 0445. Add Two Numbers II Solution in Java, Python, C++, JavaScript, Go & Rust | Explanation + Code

CoderIndeed
0
0445. Add Two Numbers II

Description

You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first 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 = [7,2,4,3], l2 = [5,6,4]
Output: [7,8,0,7]

Example 2:

Input: l1 = [2,4,3], l2 = [5,6,4]
Output: [8,0,7]

Example 3:

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

 

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.

 

Follow up: Could you solve it without reversing the input lists?

Solutions

Solution 1

PythonJavaC++GoTypeScriptRust
# 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]: s1, s2 = [], [] while l1: s1.append(l1.val) l1 = l1.next while l2: s2.append(l2.val) l2 = l2.next dummy = ListNode() carry = 0 while s1 or s2 or carry: s = (0 if not s1 else s1.pop()) + (0 if not s2 else s2.pop()) + carry carry, val = divmod(s, 10) # node = ListNode(val, dummy.next) # dummy.next = node dummy.next = ListNode(val, dummy.next) return dummy.next(code-box)

Solution 2

Rust
// Definition for singly-linked list. // #[derive(PartialEq, Eq, Clone, Debug)] // pub struct ListNode { // pub val: i32, // pub next: Option<Box<ListNode>> // } // // impl ListNode { // #[inline] // fn new(val: i32) -> Self { // ListNode { // next: None, // val // } // } // } impl Solution { fn create_stack(mut head: Option<Box<ListNode>>) -> Vec<i32> { let mut res = vec![]; while let Some(node) = head { res.push(node.val); head = node.next; } res } pub fn add_two_numbers( l1: Option<Box<ListNode>>, l2: Option<Box<ListNode>>, ) -> Option<Box<ListNode>> { let mut s1 = Self::create_stack(l1); let mut s2 = Self::create_stack(l2); let mut dummy = Box::new(ListNode::new(0)); let mut carry = 0; while !s1.is_empty() || !s2.is_empty() || carry != 0 { if let Some(val) = s1.pop() { carry += val; } if let Some(val) = s2.pop() { carry += val; } dummy.next = Some(Box::new(ListNode { val: carry % 10, next: dummy.next.take(), })); carry /= 10; } dummy.next.take() } }(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !