Option C ( Circular Doubly linked List)
Analyze below Code which is $O(1)$
Suppose List1's first element is pointed by pointer $p1$
And List2's first element is pointed by $p2$
And tmp is a temporary pointer of node type.
p1->prev->next = p2 ;
tmp= p2-> prev ;
p2-> prev= p1-> prev ;
p1-> prev = tmp;
tmp -> next = p1;
Options A&B of linked list are not possible in $O(1)$. Because they cannot find out rear element without doing a linear traversal.
For Option D. Array implementation requires $O(n_1+n_2)$ copy operations where $n_1$ and $n_2$ represent the sizes of List1 and List2 respectively.