previous | index | next

A More Efficient Method of Reversing

List to be reversed (lst1)    Reversed list so far (lst2)
(1 2 3 4 5) ()
(2 3 4 5) (1)
(3 4 5) (2 1)
(4 5) (3 2 1)
(5) (4 3 2 1)
() (5 4 3 2 1)
     (define reverse
       (lambda (lst)
         (define reverse-onto
           (lambda (lst1 lst2)
             (if (null? lst1)
                 lst2
                 (reverse-onto (cdr lst1)
                               (cons (car lst1) lst2)))))
         (reverse-onto lst '())))
Q: If the list to be reversed has n elements, how many conses are performed?

A: n (linear, or Θ(n))


previous | index | next