[leetcode] 2. Add Two Numbers

2022. 11. 14. 15:53노트/Algorithm : 알고리즘

 

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 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 = [2,4,3], l2 = [5,6,4]
Output: [7,0,8]
Explanation: 342 + 465 = 807.

Example 2:

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

Example 3:

Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
Output: [8,9,9,9,0,0,0,1]

 

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.

 

# Definition for singly-linked list.
class ListNode(object):
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
class Solution(object):
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        a = self.changeStringNumber(self.toList(self.reverse(l1)))
        b = self.changeStringNumber(self.toList(self.reverse(l2)))
        
        added_number = a + b

        result = [s for s in str(added_number)]
        
        result = self.reversedLinkedList(result)
        return result
        
        
        
    # 1. reverse linked list 
    def reverse(self, node, prev = None):
        if not node:
            return prev 
        
        while node:
            next, node.next = node.next, prev
            prev, node = node, next 
            
        return prev 
        
    # 2. return to list 
    def toList(self, node):
        result = [] 
        while node:
            result.append(node.val)
            node = node.next 
            
        return result 
    
    # 3. change int number 
    def changeStringNumber(self, num_list):

        return int(''.join(str(n) for n in num_list) )
    
    
    # 4. return to reversed linked list
    def reversedLinkedList(self, num_list):
        prev = None 
        
        for n in num_list: 
            node = ListNode(n)
            node.next = prev 
            prev = node
            
        return node