study&grow 2019. 5. 9. 11:17
728x90

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 contain a single digit. Add the two numbers and return it as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Example:

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 Explanation: 342 + 465 = 807.

 

 

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        total = 0
        len_digit = 1
        def convert_to_decimal(total,len_digit,l1):
            while True:
                total += l1.val * len_digit  
                if not l1.next is None:
                    next_node = l1.next
                    len_digit *= 10
                    l1 = next_node
                else:
                    return total

        def decimal_to_linkedlist(decimal):
            node = n = ListNode(0)
            if decimal == 0:
                return node
            while decimal != 0:
                n.next = ListNode(decimal % 10)
                decimal //= 10
                n = n.next
            return node.next    
            
        decimal = convert_to_decimal(0,1,l1) + convert_to_decimal(0,1,l2)
        
        return decimal_to_linkedlist(decimal)

# class Solution:
# # @return a ListNode
#     def addTwoNumbers(self, l1, l2):
#         carry = 0
#         root = n = ListNode(0)
#         while l1 or l2 or carry:
#             v1 = v2 = 0
#             if l1:
#                 v1 = l1.val
#                 l1 = l1.next
#             if l2:
#                 v2 = l2.val
#                 l2 = l2.next
#             carry, val = divmod(v1+v2+carry, 10)
#             n.next = ListNode(val)
#             n = n.next
#             print(root.next.val)
#             print(n.val)
#         return root.next