Here the keyword is "FIFO order" which means we are talking about queue data structure . And we know well that in queue :
Insertion is at one end and deletion at other end .
Lets analyse each one of the given DS one by one :
a) For double linked list with pointer to head node :
Say we insert from beginning and delete from end . Then as pointer to last node is not given we have to travserse and then delete the last node . Hence deletion = O(n) , insertion = O(1)
b) Single linked list with pointer to head node and tail node :
Here as pointer of last node is given as well , hence time taken to insert = time taken to delete = O(1)
c) Circular doubly linked list with pointer to head node :
Here no need of tail pointer to delete last node as it is circular doubly linked list . Hence both insertion and deletion can be done in O(1) in this case as well .
There is no relevance is tree is here as we are not concerned with hierarchial data structure here.
Hence D) should be the correct option .