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-> next ;
tmp -> next = p1
Option A&B of linked list are not possible in $O(1)$. Bcz they cant find out rear element without doing linear traversal.
For Option D. Array implementation it requires $O(n1+n2)$ Copy operation where $n1$ represents size of List1.