are both these functions correct
/*
 * Return a pointer to the user with this name in
 * the list starting with head. Return NULL if no such user exists.
 *
 * NOTE: You'll likely need to cast a (const User *) to a (User *)
 * to satisfy the prototype without warnings.
 */
User *find_user(const char *name, const User *head) {
    // Create a pointer to traverse the list
    User *curr = (User *)head;

    while (curr != NULL) { // Traverse the list
        if (strcmp(curr->name, name) == 0) {  // Return the user if found
            return curr;
        }
        curr = curr->next;
    }

    return NULL;   // If end of the list is reached and user is not found, return NULL
}


/*
 * Print the usernames of all users in the list starting at curr.
 * Names should be printed to standard output, one per line.
 */
void list_users(const User *curr) {
    printf("User List\n");  // Print the header
    User *curr_user = (User *)curr; // Create a pointer to traverse the list

    while (curr_user != NULL) {  // Traverse the list
        printf("\t%s\n", curr_user->name); // Print the names
        curr_user = curr_user->next;
    }
}