(defun do-nreverse (x y)
(if (null x) y
(let ((temp (cdr x)))
(setf (cdr x) y)
(do-nreverse temp x))))

(defun do-reverse (x y)
(if (null x) y
(do-reverse (cdr x) (cons (car x) y))))

(defun my-append (&rest lsts)
(if (null lsts) lsts
(do ((lsts lsts (cdr lsts))
(r '() (do-reverse (car lsts) r)))
((null (cdr lsts)) (do-nreverse r (car lsts))))))