给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
链表结构示例

示例1:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

示例2:

输入:l1 = [0], l2 = [0]
输出:[0]
示例 3:

示例3:

输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]

我的解法:

    # 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]:
            def parse_list_to_int(list_head: Optional[ListNode]):
                """
                把列表解析为数字
                """
                my_list_statck = []
                current_node = list_head
                # 先将整个列表压入列表
                while current_node is not None:
                    my_list_statck.append(current_node.val)
                    current_node = current_node.next
                # 将列表转置,这样2->4->3这样的链表就被转换为[3,4,2]这样的数组了
                my_list_statck.reverse()
                num = 0
                # 累乘法拼接成为最终的整形:342
                for i in my_list_statck:
                    num *= 10
                    num += i
                return num
    
            def parse_int_into_reverse_list(num: int):
                """
                把数字转换为转置链表
                :param num: 比如123
                :return:
                """
                # 把数字转为形如['1','2','3']的数组
                result_list = list(str(num))
                # 按照题目要求对数字各个位数进行转置
                result_list.reverse()
                # 判空处理
                if result_list.__len__() == 0:
                    return ListNode(0)
                # 遍历转置后的数组,每一个数组元素形成一个ListNode,拼接成链表
                head_node = ListNode(int(result_list[0]))
                # 标记当前链表尾结点
                cur_node = head_node
                list_len = len(result_list)
                for i in range(1, list_len):
                    temp_node = ListNode(int(result_list[i]))
                    cur_node.next = temp_node
                    cur_node = temp_node
                return head_node
    
            num1 = parse_list_to_int(l1)
            num2 = parse_list_to_int(l2)
            result = num1 + num2
            return parse_int_into_reverse_list(result)