I looked at the first solution and my reaction is something along the lines of "what????". Why not just something simple like.. (defun foo(thing) (list (nth (1- (length thing)) thing)) Same applies for problem 2.
I think you don't really want to use length. Since it is a program evaluating last it might not be that bad as you have to goto the last element anyway.
Here is mine:
(defun our-last (list) (if (rest list) (our-last (rest list)) list))