This function optionally can be used to allocate a new element that is then linked into the chain. The caller indicates the location in the chain where the data chain element should be linked. Elements can be linked at the head of the chain, the end of the chain, or after a specified chain element. After the function returns a pointer to a new data chain element, the action routine can then fill in the element's fields as appropriate.