; last man standind

(define (f xs k)
  (define (last-pair xs) (if (null? (cdr xs)) xs (last-pair (cdr xs))))
  (define (cycle xs) (set-cdr! (last-pair xs) xs) xs)
  (let loop ((k (- k 1)) (xs (cycle xs)))
    (cond ((= (car xs) (cadr xs))
            (car xs))
          ((zero? k)
            (let ((k (cadr xs)))
              (set-cdr! xs (cddr xs))
              (loop k xs)))
          (else (loop (- k 1) (cdr xs))))))

(display (f '(6 2 3 1 4 7 5) 3)) (newline)