When i know that i have to repeatedly insert an element at the end of the linked list, is it okay to have a tail pointer in the linked list all the time, just like a head pointer, and keep it updated? Will the data structure still be a linked list? It allows one to get rid of the iterations of entire list every time so why don't people generally use it? or is it common to have a tail pointer?
The data structure which has the head and tail pointers is the linked list container. The linked list itself is different, and is generally not exposed directly through the container's API.