private static Node<Integer> add_TailOnesDigitData_Internal(Node<Integer> num1, Node<Integer> num2, IntWrapper carry) {
        if (num1 == null && num2 == null) {
            return null;
        }
        Node<Integer> prevRes = null;
        if (num1 == null) {
            prevRes = add_TailOnesDigitData_Internal(null, num2.next, carry);
        } else if (num2 == null) {
            prevRes = add_TailOnesDigitData_Internal(num1.next, null, carry);
        } else {
            prevRes = add_TailOnesDigitData_Internal(num1.next, num2.next, carry);
        }
        Integer intData = null;
        if (num1 == null) {
            intData = num2.data + carry.i;
        } else if (num2 == null) {
            intData = num1.data + carry.i;
        } else {
            intData = num1.data + num2.data + carry.i;
        }
        carry.i = intData / 10;
        Node<Integer> newRes = new Node<Integer>(intData % 10);
        newRes.next = prevRes;
        return newRes;
    }