You want to join the results of the recursive calls with APPEND or NCONC, not LIST (NCONC should be safe because you'll be constructing new lists in the recursion). And you also need to wrap the result of the recursive work on (CAR X) into a list before appending them.

I'm not going to provide the actual code; please try to apply the advice above and implement it yourself, I think you'll learn more.

Another way to implement it would be:

(defun rev (x) (if (listp x) (nreverse (mapcar #'rev x)) x))

But the use of NREVERSE might be considered cheating for your homework problem. It depends on whether the exercise is in handling the recursion or in performing the reversing.