본문 바로가기

hacking or software engineering skills/leetcode

2. Add Two Numbers

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

'hacking or software engineering skills > leetcode' 카테고리의 다른 글

6. ZigZag Conversion  (0) 2019.05.09
5. Longest Palindromic Substring  (0) 2019.05.09
4. Median of Two Sorted Arrays  (0) 2019.05.09
3. Longest Substring Without Repeating Characters  (0) 2019.05.09
1. two Sum  (0) 2019.05.09