public static Node<Integer> add_HeadOnesDigitData(Node<Integer> num1, Node<Integer> num2) {
        Node<Integer> p1 = num1;
        Node<Integer> p2 = num2;
        Node<Integer> resHead = new Node<Integer>(null);
        Node<Integer> currRes = resHead;
        int carry = 0;

        while (p1 != null && p2 != null) {
            int result = p1.data + p2.data + carry;
            currRes = insertNode(resHead, currRes, result);
            carry = result / 10;
            p1 = p1.next;
            p2 = p2.next;
        }

        while (p1 != null) {
            int result = p1.data + carry;
            currRes = insertNode(resHead, currRes, result);
            carry = result / 10;
            p1 = p1.next;
        }

        while (p2 != null) {
            int result = p2.data + carry;
            currRes = insertNode(resHead, currRes, result);
            carry = result / 10;
            p2 = p2.next;
        }
        if (carry != 0) {
            currRes.next = new Node<Integer>(carry % 10);
            currRes = currRes.next;
        }
        return resHead.data == null ? null : resHead;
    }