struct List
{
//First person in the list, null if list is empty
Person *head;
//Current person in the list, where a null pointer inicate a past-the-end position
Person *current;
//Previous element, null if current is first
Person *previous;
};

Also, in ListInsert, why should person be inserted in the current position? Shouldn't it be inserted relative to head? I would expect current and previous to be concerned with traversing the linked list and shouldn't be used as an insertion point.