public ListNode addInList (ListNode head1, ListNode head2) {
        // write code here
        Stack<ListNode> stack1=new Stack<>();//用栈保存链表 便于从链表尾部相加
        Stack<ListNode> stack2=new Stack<>();
        while (head1!=null){
            stack1.push(head1);
            head1=head1.next;
        }
        while (head2!=null){
            stack2.push(head2);
            head2=head2.next;
        }
        int jw=0;//初始化进位为0 后续不断更新
        ListNode pre=new ListNode(0);
        pre.next=null;
        while (stack1.size()>0 && stack2.size()>0){
            int  p1=stack1.pop().val;
            int  p2=stack2.pop().val;
            int rr =(p1+p2+jw)%10;
            jw=(p1+p2+jw)/10;
            ListNode temp=new ListNode(0);
            temp.val=rr;
            temp.next=pre.next;
            pre.next=temp;
        }
        //stack jw pre
        jw=tj(stack1,jw,pre);
        jw=tj(stack2,jw,pre);
        if (jw!=0) {
            ListNode t=new ListNode(0);
            t.val=jw;
            t.next=pre.next;
            pre.next=t;
        }
        return pre.next;
    }

    private int tj(Stack<ListNode> stack1, int jw, ListNode pre) {
        while (stack1.size()>0){
            int p1=stack1.pop().val;
            int rr = (p1+jw)%10;
            jw=(p1+jw)/10;
            ListNode temp=new ListNode(0);
            temp.val=rr;
            temp.next=pre.next;
            pre.next=temp;
        }
        return jw;
    }