#并不需要二外的空间,就是一些细节特别狗血

# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    def addInList(self , head1 , head2 ):
        if not head1: return head2
        if not head2: return head1 

        def reverse_link(root):
            r=None
            while root:
                l=r
                r=root
                root=root.next
                r.next=l 
            return r 
        ptr1=reverse_link(head1)
        ptr2=reverse_link(head2)

        i,ptr=0,ListNode(7) #初始进位,创建链表
        sol=ptr
        while ptr1 and ptr2:  
            tmp=ptr1.val+ptr2.val
            sol.next=ListNode((tmp+i)%10)  #当前值
            sol=sol.next
            i=(tmp+i)//10  #更新进位值
            ptr1=ptr1.next 
            ptr2=ptr2.next 


        def remain_long(root,sol1,i): #判断剩余一个长位的情况
            ptr=sol1
            while root: 
                tmp=(root.val+i)
                ptr.next=ListNode(tmp%10)
                ptr=ptr.next
                i=tmp//10 
                root=root.next
            return sol1,i 
        if ptr1: 
            sol1,i=remain_long(ptr1,ListNode('TMP'), i)
            sol.next=sol1.next
        elif ptr2: 
            sol1,i=remain_long(ptr2,ListNode('TMP'), i)
            sol.next=sol1.next

        ptr=ptr.next 
        head=reverse_link(ptr)
        if i>=1:
            new_head=ListNode(i)
            new_head.next=head
            head=new_head
        return head
        # write code here