void RemoveDupMins(ListNode * list) // postcondition: all but first minimal nodes removed from list { ListNode * min = FirstMin(list); if (min != NULL) // there are nodes in the list { list = min; // lookahead, so list starts at min // invariant: only one node between/including min and list // contains min->info while (list != NULL && list->next != NULL) // at least two nodes { if (list->next->info == min->info) { RemoveNext(list); } else { list = list->next; } } } }