That does have a head and tail pointer. Since the requirement is singly-linked list, each node should only have a single link. Really, there's no need to even have a tail pointer in this example unless you are also keeping track of size, which you are not.
I guess a tail pointer gives you the option to add at tail in constant time.
Your two structs are correct right now. You don't need a tail pointer ever. It's just for convenience for working with the end like I said. As for the nodes, all you need is a pointer to the next node, which is what your requirements are asking.
Have you tested it? This is where printing out your list comes in handy. Write down on paper the expected output, run the program and output the list after each addition. Then you'll see if it's working. If not, come back and we'll help you.
tested and working fine.
i know how the concept run.
i always use paper to draw it, but not really sure it's fullfill my question or not.
as the question given by the UOW australia are really sucks enough.
said by my lecturer . haha.
so can i ask any senior here?
i really need make sure about it that isn't my question that i implement for the addNode
full fill Insert item x before position p (given by an iterator)? need to make sure..
before position p is mean what..
If you have a list,  ->  ->  ->  -> 
and you want to insert element A at position 2, you have to make a choice. Does that mean you place it in front of 2, or behind 2. Since it says before, you place it behind, so the new list would be:
here is my full program . but then when i insert data at position middle it's posibble to add.
but if i wan insert the data to the head. it seem like fail. but now my answer is fullfill question requirement already ya?