(defun my-nreverse-1 (l)
  (my-nreverse-1-aux l nil))

(defun my-nreverse-1-aux (l next)
  (if (null l)
      next
      (let ((buf (rest l)))
        (setf (rest l) next)
        (my-nreverse-1-aux buf l))))

(defparameter *x* '(1 (2 3) 4 (5 6) 7 8))
(princ (nreverse *x*))