Please don\'t close this saying a duplicate question. I made an important change so not to confuse people, I resubmitted this much clearer codes.
In this line:
hash->list = (ListPtr *)calloc(capacity, sizeof(List));
The calloc function will allocate some memory for List, then return a pointer to the allocated memory, which would be List* (or, equivalent to ListPtr due to the typedef.)
In the code, the pointer is then casted to (ListPtr*), which would actually be List** which is not the type List* which is expected. Therefore, change the ListPtr* to ListPtr and see if that would fix that line.
Edit
As pointed out by leiz and Klathzazt in the comments, the Hashtable.list type is ListPtr* or List**:
struct hashtable {
...
ListPtr *list;
This would be the reason why trying to assign a ListPtr type returned and casted from calloc would cause a compiler error. Rather than storing a pointer to a pointer of a List in the Hashtable, it should just hold a pointer to the list:
struct hashtable {
...
ListPtr list;
This should eliminate the compiler error, as the type of Hashtable.list and typecast both will be ListPtr.