这个小程序能给个注释吗

#include
using namespace std;

struct Node {
int val;
Node* nextNode;
Node(int value) {
val = value;
nextNode = NULL;
}
};
class MyList {
public:
Node* headNode;
MyList() {
headNode = new Node(0);
}
void insertTail(int val) {
Node* temp = headNode;
while (temp->nextNode != NULL) {
temp = temp->nextNode;
}
temp->nextNode = new Node(val);
}

void insertHead(int val) {
    Node* temp = new Node(val);
    temp->nextNode = headNode->nextNode;
    headNode->nextNode = temp;
}

void print() {
    Node* temp = headNode->nextNode;
    cout << "print list node" << endl;
    while (temp != NULL) {
        cout << temp->val << endl;
        temp = temp->nextNode;
    }
}
int XCount(int val) {
    Node* temp = headNode->nextNode;
    int count = 0;
    while (temp != NULL) {
        if (temp->val == val) count++;
        temp = temp->nextNode;
    }
    return count;
}
int OddCount() {
    Node* temp = headNode->nextNode;
    int count = 0;
    while (temp != NULL) {
        if (temp->val & 1) count++;
        temp = temp->nextNode;
    }
    return count;
}

};
int main() {
MyList list;
// insert to tail
int num = 0;
cout << "please insert num to tail, end of 0" << endl;
while (true) {
cin >> num;
if (num > 0) {
list.insertTail(num);
}
else {
break;
}
}
list.print();
int x;
cout << "please inser X" << endl;
cin >> x;
cout << "the count of node whose num is equal to x is " << list.XCount(x) << endl;
return 0;
}